HTTPX:Python 的下一代 HTTP 客户端

Python 社区常用的 requests 库,已经有了 15,293 个 Star:

正文顶部截图

但 requests 只支持同步调用,也没有 HTTP/2 支持。这两个限制在高并发场景下会成为瓶颈。

HTTPX 就是来解决这些问题的。它是 encode 团队开发的 Python HTTP 客户端库,API 设计与 requests 高度兼容,迁移成本很低。

README区域截图

HTTPX 的核心特性:

  • 同时支持 HTTP/1.1 和 HTTP/2
  • 提供同步和异步两套 API
  • 内置命令行客户端
  • 与 requests API 高度兼容,迁移成本低
  • 可以直接请求 WSGI/ASGI 应用
  • 完整的类型注解,100% 测试覆盖
  • 所有请求都有严格的超时控制

HTTPX 继承了 requests 的全部标准功能:Keep-Alive 连接池、Cookie 持久化、SSL 验证、Basic/Digest 认证、代理支持、流式下载、分块请求等。


安装

pip install httpx

需要 HTTP/2 支持:

pip install httpx[http2]

需要 SOCKS 代理:

pip install httpx[socks]

要求 Python 3.9 以上。


基本用法

代码风格和 requests 几乎一致:

>>> import httpx
>>> r = httpx.get('https://www.example.org/')
>>> r
<Response [200 OK]>
>>> r.status_code
200
>>> r.headers['content-type']
'text/html; charset=UTF-8'

原来用 requests 写的代码,把 import 换成 httpx 就能跑。


命令行使用

安装 CLI 组件后可以直接在终端发请求:

pip install 'httpx[cli]'
httpx http://httpbin.org/json

终端里直接看到请求结果,调试接口时比打开浏览器方便。


异步支持

HTTPX 原生支持 async/await:

async with httpx.AsyncClient() as client:
    r = await client.get('https://www.example.org/')
    print(r.status_code)

需要并发请求时,异步接口比同步逐个调用快得多。requests 要实现类似功能需要借助 aiohttp,HTTPX 直接内置了。


WSGI/ASGI 直接调用

HTTPX 可以直接对 WSGI 或 ASGI 应用发请求,写测试时不用启动服务器,直接传入应用对象就行。

底层传输层用的是 httpcore,SSL 证书来自 certifi,异步库检测来自 sniffio,各组件分工明确。

GI 或 ASGI 应用发请求,写测试时不用启动服务器,直接传入应用对象就行。

底层传输层用的是 httpcore,SSL 证书来自 certifi,异步库检测来自 sniffio,各组件分工明确。

更多推荐