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 的成本也相对可控。

相关推荐
用户8356290780513 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户8356290780514 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
你好潘先生12 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师12 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码12 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf12 小时前
FastAPI 如何连接 MySQL
后端·python
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户8356290780511 天前
使用 Python 在 PDF 中创建与管理书签
后端·python
MeixianAgent1 天前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
咕白m6251 天前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python