HTTPX:Python HTTP 客户端的下一代选择
HTTPX:Python HTTP 客户端的下一代选择
httpx 在 GitHub 上已经拿到 15,279 Star 了。
encode 团队出品的这个库,目标是取代 requests 成为 Python 生态里默认的 HTTP 客户端。它做到了跟 requests API 兼容的同时,内置了对 HTTP/2、异步请求和命令行工具的支持。
1、 它跟 requests 区别在哪

requests 是 Python 世界里用得最广的 HTTP 库,但它有两个短板:不支持 HTTP/2,不支持原生 async/await。HTTP/2 的多路复用对高并发场景是刚需,而异步编程已经是 Python Web 开发的主流范式。这两个短板在实际项目中越来越绕不开。
HTTPX 把这两个问题都填上了。API 设计跟 requests 高度接近,迁移成本低。底层从 urllib3 换成了自研的 httpcore,用 h11 和 h2 分别处理 HTTP/1.1 和 HTTP/2。
2、 核心能力

同步和异步两套接口,同一个 Session 对象同时支持 with 和 async with。请求超时默认开启,不会出现忘记设 timeout 导致请求永久挂起的情况。
命令行客户端是另一个亮点。pip install httpx[cli] 之后用 httpx http://example.org 就能直接发请求,调试接口时不用切到 Postman 或 curl。
测试场景下可以直接向 WSGI 或 ASGI 应用发请求,不需要启动服务器。对 FastAPI、Django、Flask 的集成测试来说,这个能力省掉了一大段脚手架代码。
代码覆盖率 100%,全部类型标注。
3、 安装和起步
$ pip install httpx
需要 HTTP/2 支持:
$ pip install httpx[http2]
基本用法跟 requests 一样,不用学新东西:
import httpx
r = httpx.get('https://www.example.org/')
r.status_code
r.json()
异步用法也简单:
async with httpx.AsyncClient() as client:
r = await client.get('https://www.example.org/')
Python 3.9 以上都能用。
4、 适合谁
-
已经在用 requests 但想升级到 HTTP/2 或异步的团队
-
用 FastAPI 做微服务、需要在测试里请求自己应用的开发者
-
写爬虫或 API 网关、对连接池和超时控制有要求的场景
-
需要命令行 HTTP 工具、不想记 curl 参数的人
-
写爬虫或 API 网关、对连接池和超时控制有要求的场景
-
需要命令行 HTTP 工具、不想记 curl 参数的人
更多推荐

所有评论(0)