HTTPX:Python 下一代 HTTP 客户端

文章目录

  • [HTTPX:Python 下一代 HTTP 客户端](#HTTPX:Python 下一代 HTTP 客户端)

HTTPX:Python 下一代 HTTP 客户端

Python 生态中久负盛名的 requests 库,长期占据着 HTTP 客户端的主流位置。而 HTTPX 作为一个后来者,已经积累了 15,277 颗 Star,成为不少开发者的新选择。

HTTPX 是一个全功能的 HTTP 客户端库,面向 Python 3 开发。它在保持 requests 兼容 API 的同时,补足了 requests 的短板。两者 API 设计高度一致,迁移时只需要替换导入语句,大部分代码无需改动。

最核心的一点,HTTPX 同时支持 HTTP/1.1 和 HTTP/2。在 requests 只支持 HTTP/1.1 的背景下,这一特性让它在处理现代 Web 服务时更有优势。HTTP/2 的多路复用能力在高并发场景下能降低连接开销,提升传输效率。

HTTPX 的另一大特点是原生支持异步。它提供标准的同步接口,也提供完整的异步 API。这意味着你既可以用熟悉的同步方式写脚本,也可以在 async/await 场景下直接使用,无需再为异步 HTTP 请求寻找其他库。异步接口的引入让 HTTPX 在爬虫、高并发微服务等场景里更加得心应手。

命令行客户端是 HTTPX 的一个加分项。安装可选依赖后,可以直接在终端里发送 HTTP 请求,查看响应头和响应体:

shell 复制代码
pip install 'httpx[cli]'
httpx https://www.example.org/

基础用法和 requests 基本一致:

python 复制代码
import httpx
r = httpx.get('https://www.example.org/')
print(r.status_code)
print(r.headers['content-type'])
print(r.text)

这种设计降低了迁移成本。如果你熟悉 requests,上手 HTTPX 几乎没有门槛。

除了协议升级和异步支持,HTTPX 还具备以下能力:

直接请求 WSGI 或 ASGI 应用,这对测试 Web 框架很有帮助;全局严格超时控制;完整的类型注解;100% 的测试覆盖率;Keep-Alive 与连接池;Cookie 持久化;SSL 验证;基础与摘要认证;自动解压缩;流式下载;代理支持;分段请求;.netrc 支持等。

这些功能覆盖了日常开发的大部分需求,从简单的 GET 请求到复杂的文件上传、认证和流式处理都能应对。

安装方式简单直接:

shell 复制代码
pip install httpx

如果需要 HTTP/2 支持:

shell 复制代码
pip install httpx[http2]

需要 SOCKS 代理:

shell 复制代码
pip install httpx[socks]

HTTPX 要求 Python 3.9 或更高版本。

依赖方面,HTTPX 底层基于 httpcore 处理传输,使用 h11 实现 HTTP/1.1,配合 certifi、idna 和 sniffio。可选依赖包括 h2(HTTP/2)、socksio(SOCKS 代理)、rich(终端增强)、click(CLI)、brotli 和 zstandard(压缩解码)。模块化的依赖设计让用户只安装自己需要的部分,减少不必要的包体积。

社区生态方面,不少主流 Python 项目已将 HTTPX 作为默认 HTTP 客户端,FastAPI 的测试客户端、某些异步爬虫框架都建立在 HTTPX 之上。

从定位来看,HTTPX 并非要取代 requests,而是在其基础上做现代化扩展。requests 的 API 设计在 Python 社区深入人心,HTTPX 选择继承这一设计,同时补上协议和并发方面的能力缺口。

对于新项目,如果你需要 HTTP/2 或异步支持,HTTPX 是一个值得考虑的选项。对于已有项目,从 requests 迁移到 HTTPX 的成本也相对可控。

TTP/2 或异步支持,HTTPX 是一个值得考虑的选项。对于已有项目,从 requests 迁移到 HTTPX 的成本也相对可控。

相关推荐
ι:4 分钟前
MATLAB 与 Python 搭建无人机地面站:优势、劣势与选型逻辑
python·matlab·无人机
船厂电气自动化ai大模型13 分钟前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
jufeng130732 分钟前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 7 篇】
python·ai agent·权限系统
梦想很大很大33 分钟前
如果有一个本地优先的 Workflow 工具,你们团队会愿意用吗?
python·agent·workflow
用户8356290780511 小时前
Python 自动化 Word 文本框处理:创建、定位、填充内容与管理
后端·python
数据知道2 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
努力的小Qin3 小时前
梯度下降如何实现参数优化:从线性回归到 Sigmoid 分类
人工智能·python·神经网络
strength_zhou20133 小时前
Python检查MongoDB索引列中的字段是否存在
python·mongodb
zander2583 小时前
LeetCode 739:每日温度——为什么单调栈要持续弹出
开发语言·python·算法
for_ever_love__4 小时前
python基础语法学习: 文件操作
python·学习