曦远 (DealiAxy)一份私人的文字刊物

StarBlog
返回文章列表折页手记阅读全文
Python

Python网络请求库,从 requests 到 httpx

Requests早该退休了,httpx这老古董才配活在异步时代?HTTP/2和超时?这些基本配置requests早该有。异步支持原生?别逗了,这年头谁还用同步。

曦远 (DealiAxy)约 6 分钟
目录7 个章节

前言

如果说 Python 有哪个库改变了互联网开发的门槛,requests 绝对榜上有名。

它用极简的 API 终结了 urllib2 那个混乱的时代。

直到今天,requests.get(url) 依然是很多程序员下意识写出的第一行爬虫代码。

但随着 Python 异步生态(Asyncio)的全面爆发,以及 HTTP/2 协议的普及,这个诞生于 2011 年的老兵开始显露疲态。

PS:为什么 AI 时代还要亲自钻研新技术?

因为 AI 的底色是“过去”。

如果你不掌握先进的工具,AI 就会用它的“经验惯性”把你留在旧时代。

只有你懂新东西,才能指挥 AI 写出更现代的代码。

AI 的本质是“概率模型”,它更倾向于给出训练数据中最常见、最保守的方案(往往也就是旧方案)

HttpX

httpx 并不是要推翻 requests,而是要完成它的现代化改造。它的核心口号是:“几乎完全兼容 Requests API,但原生支持异步。”

新项目切换到 httpx 的理由:

  • 原生异步支持: 在处理成千上万个 API 调用时,同步的 requests 会让你的程序在等待网络 IO 时“死掉”。而 httpx 配合 async/await,可以在一秒钟内并发处理极高密度的请求,而不消耗多余的线程资源。
  • 支持 HTTP/2: 相比 HTTP/1.1,HTTP/2 支持多路复用。这意味着在同一个连接上可以并行发送多个请求,大幅降低了延迟。
  • 严格的超时管理: requests 默认永不超时,这在生产环境中是极其危险的。而 httpx 默认开启超时检查,更加符合现代微服务的健壮性要求。

例子

如果你熟悉 requests,迁移到 httpx 的成本几乎为零。

同步写法对比(几乎一致)

# Requests
import requests
resp = requests.get("https://api.github.com/events")

# HTTPX
import httpx
resp = httpx.get("https://api.github.com/events")

异步写法

import httpx
import asyncio

async def fetch_tech_news():
    async with httpx.AsyncClient() as client:
        # 同时发起多个请求,效率起飞
        tasks = [client.get(f"https://news.com/api/{i}") for i in range(10)]
        responses = await asyncio.gather(*tasks)
        return [r.json() for r in responses]

asyncio.run(fetch_tech_news())

对比

特性RequestsHTTPX
异步支持❌ (需借助线程池)✅ 原生支持 (Async/Await)
HTTP/2❌✅ 支持
API 友好度极高极高 (兼容 Requests)
类型提示一般✅ 完善 (完美契合 IDE)
适用场景简单脚本、小型爬虫Web 异步框架、高并发采集、现代化工程

小结

异步虽然好用,但有些坑:

  • httpx 的 AsyncClient 最好使用 async with 上下文管理器,否则容易造成连接泄露。
  • 在 Windows 环境下使用异步 loop 要额外注意(如 SelectorEventLoop 的限制)

_EOF_

Python网络请求库,从 requests 到 httpx

本文作者:
程序设计实验室
版权声明:
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

相关文章

编写爬虫自动下载王者荣耀官网上好看的壁纸

前言 偶然间发现王者荣耀的官网上发布了这么多好看的壁纸。 地址:http://pvp.qq.com/web201605/wallpaper.shtml 看了一下,每一张都挺喜欢的,而且还有十多页,一张一张去慢慢下载肯定不是作为一个Geeker的正确姿势。 由于最近python用得比较多,所以看到什么好玩的就想爬虫下载下来,所以看到这么多好看图片,我又“熟练”地掏出了python。 分析 这个网站长

2021-12-18 · Python · 约 1 分钟

Python数据展示 - 生成表格图片

前言 前一篇文章介绍了推送信息到企业微信群里,其中一个项目推送的信息是使用Python自动生成的表格,本文来讲讲如何用Python生成表格图片。 选一个合适库 Python最大的优点就是第三方库丰富,基本你要什么功能,都能找到别人实现好的库,几行代码一调用就完事了。 Pytable 项目地址:https://github.com/HiroshiARAKI/pytable 最先找到的是日本人开发的p

2022-04-09 · Python · 约 1 分钟

讨论

共 0 条

良言一句三冬暖,恶语伤人六月寒。

加载评论中…