HTTPX:Python中的下一代HTTP客户端,比Requests更强大!
在Python生态系统中,requests库长期以来一直是HTTP客户端的首选工具。然而,随着异步编程和HTTP/2的普及,开发者们需要一个更现代、更灵活的解决方案。这时候,httpx应运而生!
一、什么是httpx?
HTTPX 是一个功能强大且现代化的Python HTTP客户端库,支持同步和异步请求,并内置HTTP/2支持。它提供了与requests类似的API,但增加了许多新特性,使其成为新一代HTTP工具的首选。
主要特性:
- 同步 & 异步支持:
- 支持传统的同步请求,也支持异步请求(基于asyncio或trio)。
- 异步请求性能强劲,支持HTTP/2。
- HTTP/2支持:
- 默认支持HTTP/1.1,可通过可选的httpx[http2]扩展启用HTTP/2。
- 支持服务器推送(Server Push)等HTTP/2特性。
- 更快的性能:
- 对比requests,httpx在连接复用和异步请求方面表现更优。
- 支持HTTP/2的连接复用,减少了连接建立的开销。
- 类型注解友好:
- 完全兼容Python的类型提示(Type Hints),方便静态类型检查。
- 提供了完善的类型注解,提高了代码的可读性和可维护性。
- 强大的客户端配置:
- 支持连接超时、代理、Cookie管理、认证等高级功能。
- 提供了灵活的配置选项,满足不同场景的需求。
- 兼容requests API:
- 如果你熟悉requests
二、安装:
pip install httpx
#HTTP/2支持(可选)
pip install httpx[http2]
三、基本用法:
- 同步请求:
import httpx #连接复用 with httpx.Client() as client: response = client.get("https://httpbin.org/get") print(response.status_code) print(response.json()) #单次请求 response = httpx.get("https://httpbin.org/get") print(response.status_code) print(response.json()) - 异步请求:
import httpx import asyncio async def main(): async with httpx.AsyncClient() as client: response = await client.get("https://httpbin.org/get") print(response.status_code) print(response.json()) asyncio.run(main()) - 发送POST请求:
import httpx response = httpx.post("https://httpbin.org/post", json={"key": "value"}) print(response.status_code) print(response.json()) - 使用httpx[http2]扩展启用HTTP/2:
import httpx #单次请求 client = httpx.Client(http2=True) response = client.get("https://httpbin.org/get") print(response.status_code) print(response.http_version) print(response.json()) #连接复用 with httpx.Client(http2=True) as client: response = client.get("https://httpbin.org/get") print(response.status_code) print(response.http_version) print(response.json()) - 使用代理:
import httpx #配置代理,通常需要同时指定http和https协议 proxies = { "http://": "http://127.0.0.1:8080", "https://": "http://127.0.0.1:8080" # https请求也使用相同的代理 } client = httpx.Client(proxies=proxies, timeout=10.0) response = client.get("https://httpbin.org/get") print(response.status_code) print(response.json())
四、与Requests对比:
| 特性 | Requests | httpx |
|---|---|---|
| 同步/异步 | 同步 | 同步/异步 |
| HTTP/2 | 不支持 | 支持 |
| 连接复用 | 不支持 | 支持 |
| 类型注解 | 不支持 | 支持 |
| 配置灵活 | 有限 | 丰富 |
| 性能 | 一般 | 好 |
如果你的项目需要高性能、异步支持或HTTP/2,那么httpx无疑是更好的选择!
五、结语
HTTPX 不仅继承了requests的易用性,还引入了许多现代HTTP客户端所需的功能。无论是同步还是异步编程,它都能提供出色的体验。如果你还没尝试过httpx,现在就是最佳时机!