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

相关推荐
大貔貅喝啤酒8 小时前
Unittest框架使用教程
自动化测试·python
一个简单的TTS开发者8 小时前
中文TTS工具有哪些-8款主流方案横向对比
人工智能·后端·python·indextts
yunfanleo8 小时前
temperature 详解:大模型采样参数原理、三种用法与工程实践
人工智能·python·rpa
CarIise8 小时前
Maven依赖传递与聚合工程
python·r语言·django
VidDown17 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频18 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林19 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li21 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook21 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺21 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python