Python网络请求库,从 requests 到 httpx 前言#
ttpX#
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())
对比#
特性 Requests HTTPX
异步支持 ❌ (需借助线程池) ✅ 原生支持 (Async/Await)
HTTP/2 ❌ ✅ 支持
API 友好度 极高 极高 (兼容 Requests)
类型提示 一般 ✅ 完善 (完美契合 IDE)
适用场景 简单脚本、小型爬虫 Web 异步框架、高并发采集、现代化工程
小结#
异步虽然好用,但有些坑:
httpx 的 AsyncClient 最好使用 async with 上下文管理器,否则容易造成连接泄露。
在 Windows 环境下使用异步 loop 要额外注意(如 SelectorEventLoop 的限制)
更多推荐



所有评论(0)