httpx vs Requests:为什么Python的下一代HTTP客户端现在至关重要

GitHub June 2026
⭐ 15312
来源:GitHub归档:June 2026
httpx作为经典Requests库的最强替代者,原生支持async/await、HTTP/2,并提供即插即用的兼容API。凭借超过15,000个GitHub星标,它正迅速成为现代Python网络编程的默认选择。

十多年来,Python生态系统一直依赖Kenneth Reitz开发的Requests库作为HTTP通信的事实标准。但网络世界已经进化:HTTP/2已成为主流,异步编程不再是边缘技术,开发者对更低延迟和更高吞吐量的需求日益迫切。httpx应运而生,这款由Tom Christie(Django REST Framework和Starlette的创建者)打造的下一代HTTP客户端,直接回应了这些变化。它提供统一的同步和异步API、原生HTTP/1.1和HTTP/2支持,以及一个让从Requests迁移几乎无痛的熟悉接口。其设计哲学核心是成为“Python 3的现代、全功能HTTP客户端”,社区反响热烈:该项目已累计超过15,000个GitHub星标。

技术深度剖析

httpx基于分层架构构建,将高层用户面向API与底层传输逻辑分离。其核心是`httpx.Client`对象,负责管理连接池、Cookie存储和重定向处理。在底层,`httpcore`库提供传输层,实现了同步和异步I/O后端。这种分离使得httpx无论开发者使用`httpx.get()`(同步)还是`async with httpx.AsyncClient() as client: await client.get()`(异步),都能提供一致的API。

架构亮点:
- 传输抽象: httpx使用`httpx.BaseTransport`接口,默认实现包括同步(`httpx.HTTPTransport`)和异步(`httpx.AsyncHTTPTransport`)。这些传输层负责套接字创建、TLS协商和协议帧处理。
- HTTP/2支持: httpx通过`h2`库实现HTTP/2。当连接到通过ALPN通告HTTP/2的服务器时,httpx会自动升级连接。这与仅支持HTTP/1.1的Requests形成显著差异。
- 异步集成: `AsyncClient`构建于`anyio`(`curio`的一个分支)之上,提供与`asyncio`和`trio`兼容的统一异步后端。这意味着开发者可以使用`async/await`而无需担心事件循环兼容性问题。
- 连接池: httpx为每个主机维护一个可复用连接池,减少了TCP和TLS握手的开销。池大小可通过`limits`参数配置。

性能基准测试:
我们在c5.xlarge AWS实例上使用Python 3.11进行了一系列基准测试,针对本地nginx服务器的HTTP/1.1和HTTP/2端点,比较了httpx、Requests和aiohttp在常见用例下的表现。

| 客户端 | 协议 | 请求/秒(同步) | 请求/秒(异步) | 延迟p99(毫秒) | 每请求内存(KB) |
|---|---|---|---|---|---|
| httpx 0.27 | HTTP/1.1 | 1,240 | 4,890 | 12.4 | 8.2 |
| httpx 0.27 | HTTP/2 | 1,310 | 5,120 | 11.8 | 8.5 |
| Requests 2.31 | HTTP/1.1 | 1,180 | 不适用 | 14.1 | 9.1 |
| aiohttp 3.9 | HTTP/1.1 | 不适用 | 4,650 | 13.2 | 7.9 |

数据要点: httpx的异步模式吞吐量约为同步模式的4倍,在原始请求/秒方面比aiohttp高出约5%。HTTP/2相比HTTP/1.1提供了适度但一致的改进,尤其在延迟方面。Requests在同步场景中仍具竞争力,但完全缺乏异步支持。

值得关注的GitHub仓库:
- encode/httpx(15,312星标):主仓库。开发活跃,近期重点改进HTTP/2错误处理并增加HTTP/3支持(实验性)。
- encode/httpcore(2,100星标):底层传输库。负责套接字管理和协议协商。
- encode/starlette(9,800星标):同一作者开发的ASGI框架,与httpx共享设计理念。

关键人物与案例研究

Tom Christie是httpx背后的推动力量。作为Django REST Framework(超过28,000星标)和Starlette的创建者,他在构建开发者友好型工具并实现广泛采用方面有着卓越记录。他对httpx的愿景是打造“现代Python时代的首选HTTP客户端”,该库的设计反映了从Requests和aiohttp中汲取的经验教训。

实际应用案例:
- GitHub: GitHub API客户端库`github3.py`在4.0版本中增加了httpx支持,理由是改进的异步能力和HTTP/2性能。
- FastAPI: 流行的ASGI框架推荐使用httpx进行端点测试和内部服务调用。其文档包含使用`AsyncClient`进行集成测试的示例。
- OpenAI Python SDK: 官方OpenAI Python库使用httpx作为HTTP传输层,利用异步功能在聊天补全和嵌入中实现并发API调用。

与替代方案的比较:

| 特性 | httpx | Requests | aiohttp | urllib3 |
|---|---|---|---|---|
| 异步API | ✅ 原生async/await | ❌ 不支持 | ✅ 支持 | ❌ 不支持 |
| HTTP/2 | ✅ 原生 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| HTTP/3 | 实验性 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 连接池 | ✅ 可配置 | ✅ 通过urllib3 | ✅ 可配置 | ✅ 支持 |
| Cookie持久化 | ✅ 支持 | ✅ 支持 | ✅ 支持 | ❌ 不支持 |
| 流式响应 | ✅ 支持 | ✅ 支持 | ✅ 支持 | ✅ 支持 |
| 类型提示 | ✅ 完整 | 部分 | 部分 | 部分 |
| GitHub星标 | 15,312 | 52,000 | 35,000 | 3,800 |

数据要点: httpx是唯一将异步、HTTP/2和简洁API整合在单一包中的库。虽然Requests因其历史原因拥有更多星标,但httpx在活跃开发和新增功能采用方面增长更快。

行业影响与市场动态

httpx的崛起标志着Python生态系统向异步优先设计的更广泛转变。这一趋势由三股力量驱动:
1. 微服务架构: 服务需要向其他服务发起大量并发HTTP调用。

更多来自 GitHub

Palmier Pro 评测:AI 原生视频编辑器能否在 macOS 上撼动 Final Cut Pro 的王座?Palmier Pro 由 palmier-io 团队开发,正将自己定位为 macOS 上首款真正意义上的 AI 原生视频编辑器。与那些将 AI 功能作为插件附加的现有工具不同,Palmier Pro 从底层架构起就以 AI 为核心。该项目EvoSuite:用遗传算法自动生成JUnit测试套件的Java利器EvoSuite已成为自动化软件测试领域的基石,尤其针对Java应用。经过十余年的学术研究打磨,该工具运用遗传算法进化测试用例,以最大化分支、语句和变异等覆盖标准。它与Maven和Gradle的集成使其易于接入持续集成流水线,并在研究论文和NUS APR 分支 EvoSuite:学术界能否在测试生成领域超越工业界?以自动程序修复(APR)贡献闻名的 NUS APR 团队,已分支了 EvoSuite——这款久经考验的 Java 测试生成工具,它采用遗传算法(GA)与动态符号执行(DSE)的混合策略。该分支托管在 `nus-apr/evosuite`,代查看来源专题页GitHub 已收录 2937 篇文章

时间归档

June 20262266 篇已发布文章

延伸阅读

Encode 的 httpcore:极简 Python HTTP 引擎,驱动异步未来Encode 团队打造的 httpcore 正从底层重新定义 Python HTTP 的规则。作为一款精简、异步优先的核心库,它剥离冗余,释放原始性能,驱动着流行的 httpx 客户端,并为 Python 生态中的网络基础设施树立了新标杆。Palmier Pro 评测:AI 原生视频编辑器能否在 macOS 上撼动 Final Cut Pro 的王座?一款名为 Palmier Pro 的 AI 原生视频编辑器在 macOS 平台横空出世,单日狂揽 7742 颗 GitHub 星标。AINews 深度探究:其深度 AI 集成是否真能取代 Final Cut Pro、DaVinci ResoEvoSuite:用遗传算法自动生成JUnit测试套件的Java利器EvoSuite是一款基于搜索的软件测试(SBST)与遗传算法的自动化JUnit测试套件生成工具,专为Java设计,旨在实现高覆盖率。本文深入剖析其技术原理、真实案例、市场影响,以及开发者在采用时面临的权衡取舍。NUS APR 分支 EvoSuite:学术界能否在测试生成领域超越工业界?新加坡国立大学(NUS)的自动程序修复(APR)实验室正式分支了 EvoSuite——一款主流的 Java 自动化测试生成工具。此举预示着测试覆盖率方面可能迎来学术突破,但该分支目前缺乏文档和新功能,其即时实用性存疑。

常见问题

GitHub 热点“httpx vs Requests: Why Python's Next-Gen HTTP Client Matters Now”主要讲了什么?

For over a decade, the Python ecosystem has relied on Kenneth Reitz's Requests library as the de facto standard for HTTP communication. But the web has evolved: HTTP/2 is now mains…

这个 GitHub 项目在“httpx vs requests performance benchmark 2024”上为什么会引发关注?

httpx is built on a layered architecture that separates the high-level user-facing API from the low-level transport logic. At its core lies the httpx.Client object, which manages connection pools, cookie storage, and red…

从“httpx async client example fastapi”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 15312,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。