Python httpx介绍(现代 HTTP Client)(异步请求、aiohttp、现代版Requests、httpcore、anyio、Async IO、HTTP/2)
文章目录
HTTPX:现代 Python HTTP 客户端的演进与现实
Python 开发者几乎一定会接触 HTTP 请求。
无论是:
- 调用 REST API
- 编写爬虫
- 微服务通信
- AI Agent 工具调用
- OAuth 登录
- Webhook
- RAG 检索
底层都离不开 HTTP Client。
很多年里:
Requests
几乎是 Python HTTP 请求的代名词。
但随着 Async Python 的崛起,一个新的库逐渐成为现代 Python 网络开发的重要选择:
HTTPX
HTTPX 并不是 “Requests 的替代品” 那么简单。
它更像是:
Python 网络编程从同步时代进入 Async/HTTP2 时代后的产物。
本文会从:
- 发展背景
- 架构设计
- Async 模型
- HTTP/2
- 工程实践
- 优势与缺陷
- 与 Requests/aiohttp 对比
几个角度,尽量客观地介绍 HTTPX。
一、为什么会有 HTTPX?
Requests 的时代
2011 年左右:
Requests
极大改善了 Python HTTP 开发体验。
在它出现之前:
urllib.request.urlopen(...)
代码冗长且不友好。
Requests 则提出:
requests.get(url)
简单、优雅、易读。
这也是它长期流行的重要原因。
但时代已经变化
随着:
- Async IO 普及
- 微服务增多
- API 数量爆炸
- 实时系统增加
- AI 系统大量调用 HTTP API
传统同步模型开始暴露问题。
例如:
- 一个线程只能等待一个请求
- 大量 IO 会浪费线程资源
- 高并发场景扩展成本高
- Requests 本身不支持 Async
这时候生态开始出现:
aiohttp
它解决了 Async 问题。
但 aiohttp 也存在一些现实问题:
- API 风格偏底层
- 学习成本高于 Requests
- 同步与异步完全割裂
- 更像网络框架而不是“简单 HTTP 客户端”
于是 HTTPX 出现了。
二、HTTPX 的核心目标
HTTPX 的目标其实很明确:
提供一个“现代版 Requests”。
它试图同时做到:
| 能力 | HTTPX |
|---|---|
| Requests 风格 API | ✅ |
| Async 支持 | ✅ |
| HTTP/2 | ✅ |
| 同步/异步统一接口 | ✅ |
| 更现代连接池 | ✅ |
| Streaming | ✅ |
这也是它在近几年快速流行的重要原因。
三、HTTPX 的设计理念
HTTPX 最大的特点:
不是“功能更多”。
而是:
“统一”
它试图统一:
- Sync / Async
- HTTP/1.1 / HTTP/2
- 简单 API / 高性能
- Requests 风格 / Async 世界
例如:
同步:
import httpx
response = httpx.get(
"https://api.github.com"
)
异步:
import httpx
async with httpx.AsyncClient() as client:
response = await client.get(url)
你会发现:
API 风格高度一致。
这降低了 Async 学习成本。
四、HTTPX 的底层架构
HTTPX 并不是单体实现。
它底层依赖:
httpcore
整体结构:
HTTPX
↓
httpcore
↓
anyio
↓
asyncio / trio
这里有几个关键点。
1. httpcore
负责:
- TCP
- TLS
- 连接池
- HTTP 协议实现
HTTPX 自己更多负责:
- 用户 API
- 请求模型
- 响应封装
这种分层设计比很多老库更现代。
2. anyio
HTTPX 使用:
AnyIO
作为异步抽象层。
意味着:
HTTPX 不只支持 asyncio。
理论上也支持:
- Trio
- Curio(历史上)
这是比较“现代 Python”的设计思想。
五、HTTPX 为什么适合现代系统?
1. Async IO
这是最核心的原因。
传统同步模型:
请求A -> 等待
请求B -> 等待
请求C -> 等待
大量时间浪费在:
- 网络等待
- TCP 等待
- 服务器响应等待
Async 模型:
请求A
请求B
请求C
并发等待
对于:
- AI Agent
- API 聚合层
- 网关
- Web Crawlers
收益明显。
2. 连接池
HTTPX 默认支持连接复用。
client = httpx.Client()
其内部维护:
- Keep-Alive
- 连接缓存
- TLS Session
这比:
httpx.get(url)
循环创建连接高效很多。
3. HTTP/2
HTTPX 支持:
client = httpx.Client(http2=True)
HTTP/2 带来的提升:
- 多路复用
- Header Compression
- 更少 TCP 连接
- 更低延迟
但这里需要客观看待:
六、HTTP/2 并不总是“巨大提升”
很多文章会夸大 HTTP/2。
现实是:
收益取决于场景。
例如:
| 场景 | 收益 |
|---|---|
| 高频 API 调用 | 明显 |
| 微服务 Mesh | 明显 |
| 单次请求脚本 | 很小 |
| 小型后台系统 | 有限 |
HTTP/2 并不会:
- 自动提升业务性能
- 自动减少延迟
- 自动提高吞吐
因为:
真正瓶颈很多时候在:
- 数据库
- JSON 序列化
- LLM 推理
- 网络距离
不是 HTTP 协议本身。
七、HTTPX 在 AI 系统中的流行
近几年 HTTPX 增长明显,一个原因是 AI 生态。
如今很多 AI 系统本质上是:
LLM
↓
HTTP API
↓
Tool / MCP / Search / DB
HTTP 成了 AI 基础设施的重要部分。
HTTPX 很适合:
| 场景 | 原因 |
|---|---|
| Agent Tool Calling | Async |
| LLM Streaming | Stream |
| 并发调用工具 | 高吞吐 |
| AI Gateway | HTTP/2 |
| SDK 开发 | API 易用 |
因此很多 AI SDK 已开始偏向 HTTPX。
八、HTTPX 的现实缺点
HTTPX 并不是“完美方案”。
很多文章只讲优点。
但实际工程里,它也有明显问题。
1. Async 增加复杂度
虽然 Async 性能好。
但代价是真实存在的。
例如:
- 调试更复杂
- 栈追踪更难
- 生命周期管理更复杂
- 容易出现 event loop 问题(如性能问题、逻辑错误、阻塞等)
小型项目里:
Async 甚至可能是过度工程化。
2. 不一定比 Requests 更简单
对于:
- 内部脚本
- 一次性工具
- 简单 API 调用
Requests 往往已经足够。
HTTPX 的高级能力:
很多项目其实根本用不到。
3. HTTP/2 生态并不总稳定
现实中:
很多企业 API:
- CDN
- 网关
- 负载均衡器
对 HTTP/2 的支持并不完全一致。
因此:
生产环境里仍然需要大量测试。
4. 生态成熟度仍弱于 Requests
虽然 HTTPX 已很流行。
但:
Requests
依然是 Python HTTP 世界事实标准之一。
很多老项目:
- 插件
- 中间件
- 教程
- StackOverflow 方案
仍然围绕 Requests。
九、HTTPX vs Requests
HTTPX 更适合:
| 场景 | 原因 |
|---|---|
| FastAPI | Async |
| AI Agent | 并发 |
| 高吞吐 API | 连接池 |
| 微服务 | HTTP/2 |
| Streaming | 更现代 |
Requests 更适合:
| 场景 | 原因 |
|---|---|
| 简单脚本 | 简洁 |
| 小工具 | 足够稳定 |
| 教学 | 学习成本低 |
| 老项目维护 | 兼容性高 |
十、HTTPX vs aiohttp
这是很多人容易混淆的。
实际上:
它们定位并不完全一样。
| 特性 | HTTPX | aiohttp |
|---|---|---|
| Requests 风格 | 强 | 一般 |
| Async Client | ✅ | ✅ |
| HTTP Server | ❌ | ✅ |
| WebSocket | 一般 | 强 |
| API 易用性 | 更高 | 更底层 |
| 学习成本 | 低 | 中等 |
aiohttp 更像:
“网络框架”
HTTPX 更像:
“现代 HTTP Client”
十一、一个容易被忽视的问题
很多人会把:
“使用 HTTPX”
等同于:
“系统性能更高”。
这是错误的。
真正影响性能的通常是:
- 架构设计
- 并发模型
- 数据库
- 缓存
- 网络拓扑
- LLM 推理速度
HTTP Client 只是其中一环。
HTTPX 能改善:
- IO 利用率
- 连接管理
- 并发能力
但它不会神奇解决系统瓶颈。
十二、什么时候值得使用 HTTPX?
值得
如果你正在构建:
- FastAPI 服务
- AI Agent
- API Gateway
- 并发爬虫
- 微服务
- Streaming API
HTTPX 非常合理。
不一定值得
如果只是:
- 小脚本
- 一次性工具
- 简单后台
- 低并发系统
Requests 可能更简单直接。
十三、总结
HTTPX 本质上代表的是:
Python 网络生态从同步时代向 Async 时代的演进。
它的价值不在于:
“比 Requests 更高级”。
而在于:
它更适合现代网络系统。
但与此同时:
- Async 会增加复杂度
- HTTP/2 不一定带来巨大收益
- 小项目可能没必要引入
因此:
HTTPX 并不是“所有项目都必须使用”的答案。
它只是:
现代 Python 网络开发中,一个非常优秀且现实的选择。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)