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

相关推荐
怪兽学LLM1 小时前
LeetCode 21 合并两个有序链表:彻底理解虚拟头节点(Dummy)套路
python·leetcode·链表
XLYcmy1 小时前
一个基于 Python 的轻量级 LLM(大语言模型)API 客户端程序:从API交互到LLM应用架构
服务器·python·ai·llm·prompt·agent·token
海绵宝宝的月光宝盒1 小时前
6-机械设计基础物理知识
经验分享·笔记·其他·职场和发展·课程设计·学习方法
程序员佳佳1 小时前
四个月长期实测:自建 Milvus、FAISS、原生向量 API 和向量引擎中转方案,到底怎么选?
人工智能·windows·python·gpt·milvus·faiss
shimly1234561 小时前
python3 venv 是啥?
python
aqi001 小时前
15天学会AI应用开发(六)使用离线大模型对文本生成摘要
人工智能·python·ai编程
codecrafter1232 小时前
sh:在 Python 里直接调系统命令
开发语言·python·其他
金銀銅鐵2 小时前
用 Tkinter 实现简单的论语第一章阅读器
后端·python
小玮看世界2 小时前
【技术成长实录】北京地铁12号线数据分析系统:从一个观察到一个完整项目的演进之路
python·人机交互·学习方法·cicd·项目交付