news 2026/6/10 7:46:34

encode开源的Python HTTP客户端,15k Star背后是requests的全面进化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
encode开源的Python HTTP客户端,15k Star背后是requests的全面进化

文章目录

  • encode开源的Python HTTP客户端,15k Star背后是requests的全面进化
    • API跟requests几乎一样,迁移成本很低
    • 三个requests无法提供的能力
    • 工程质量的几个细节
    • 适合什么人用

encode开源的Python HTTP客户端,15k Star背后是requests的全面进化

写Python的人几乎没有不知道requests库的。Kenneth Reitz在2011年发布的这个库,凭借一句requests.get(url)就成了Python HTTP请求的事实标准。但requests有一个硬伤:只支持同步调用,HTTP协议也停留在1.1版本。

当FastAPI、Starlette这类异步框架在2019年后快速普及,大量开发者在应用层用async/await写业务逻辑,到了网络请求层却只能用同步的requests时,异步框架的优势就被架空了一半。HTTPX正是这个时间点出现的。

项目由encode团队开发维护。这个团队同时是Django REST Framework、Starlette和uvicorn的维护者,在Python Web领域的积累横跨同步和异步两代技术栈。截至目前GitHub上15,276个Star,超过150位贡献者参与。

API跟requests几乎一样,迁移成本很低

HTTPX的设计思路很直接:保留requests用户熟悉的调用方式,然后补齐异步和HTTP/2。同步代码写出来跟requests几乎一样:

importhttpx r=httpx.get('https://www.example.org/')r.status_code# 200r.json()# 解析JSON响应

切换到异步模式时,把Client换成AsyncClient,方法调用前加await即可:

asyncwithhttpx.AsyncClient()asclient:r=awaitclient.get('https://www.example.org/')

同步和异步各对应一套独立的客户端类,界限明确。同一个项目里两种可以共存,但不能在一段代码里混用。这个设计避免了异步传染效应导致调试困难的问题。

三个requests无法提供的能力

第一,HTTP/2原生支持。requests底层走urllib3,协议固定在HTTP/1.1。HTTPX通过httpcore做底层传输,支持HTTP/2的多路复用和头部压缩。安装时加上pip install httpx[http2],之后请求自动协商协议版本,不需要改任何调用代码。

第二,内置命令行客户端。装完pip install httpx[cli],终终端里就能直接发HTTP请求。输出自带JSON语法高亮和格式化,比curl的原始文本输出更适合调试和排查。

第三,强制的默认超时。requests过去被诟病最集中的问题就是默认不设超时,某个请求网络异常时可能无限挂起,在线上的影响尤其隐蔽。HTTPX给所有请求都配置了默认超时,从库的层面规避了这类问题。

工程质量的几个细节

HTTPX的测试覆盖率达到100%,所有公开API都有类型注解。对于使用PyCharm或VSCode的开发者,这意味着自动补全准确,静态类型检查不会在HTTP调用层报一堆警告。

另外HTTPX可以直接向WSGI和ASGI应用实例发请求。写测试的时候不用先启动一个Web服务进程,直接把FastAPI或Django的app对象传给HTTPX,就能完成完整的端到端接口测试。这个特性对测试效率提升明显,也是requests做不到的。

依赖方面,底层核心是httpcore,一个专门为HTTPX设计的传输实现,比urllib3更轻量。可选依赖包括h2用于HTTP/2,socksio用于SOCKS代理,rich和click用于CLI功能。

适合什么人用

如果你在FastAPI或Starlette项目中做微服务间调用,HTTPX基本是异步HTTP客户端的首选。相比aiohttp,HTTPX的主要优势是API跟requests一致,团队里不用维护两套风格的HTTP调用代码。

如果你目前用requests且没有异步需求,可以继续用。但新项目建议直接上HTTPX,将来需要并发请求或HTTP/2时不用重构网络层。

目前的一个明确限制是不支持HTTPS代理,只支持HTTP代理。如果你的环境要求HTTPS代理,暂时还得用requests或aiohttp。此外httpcore的生态成熟度还比不上urllib3,好在encode团队的发布频率和问题响应速度都不错,项目活跃度有保障。

HTTPX使用BSD协议开源,商业使用没有障碍。

de团队的发布频率和问题响应速度都不错,项目活跃度有保障。

HTTPX使用BSD协议开源,商业使用没有障碍。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 7:45:34

大棚源头厂家实操经验分享,亲测有效!

在现代农业设施中,优质的温室大棚建造和配套服务是保障农业高产高效的重要因素。本文将分享一家优质的大棚源头厂家科农温室大棚的实操经验,并参考市场数据整理出一份数位大棚厂家的排行榜。这些信息可以帮助读者深入了解市场现状,更好地选择…

作者头像 李华
网站建设 2026/6/10 7:44:46

高空跳伞初体验:安全又刺激的价格揭秘

高空跳伞,作为极限运动的一种,近年来受到了越来越多人的喜爱。它不仅能够带来难以忘怀的刺激体验,更能让参与者从全新的角度欣赏大自然之美。然而,对于初次尝试的人来说,如何选择合适的基地、了解相关费用及确保安全成…

作者头像 李华
网站建设 2026/6/10 7:43:48

团队用 AI 大模型:统一管理、安全可控才是关键

现在很多团队和企业都会用到多个 AI 大模型提升效率,但多模型使用带来的管理问题也越来越明显。账号分散、密钥混乱、调用不可控,不仅影响效率,还存在安全隐患。我们团队试用过多款管理工具,最终选择 CenToken,核心是它…

作者头像 李华
网站建设 2026/6/10 7:42:17

吸尘器出口流程详解:美国市场准入、认证要求与物流运输方案

吸尘器出口流程:从产品认证到美国清关的完整操作路径不少企业认为吸尘器属于普通家电,出口美国不会太复杂。但实际操作中,无线吸尘器、车载吸尘器以及带锂电池的智能吸尘设备,经常因为认证、申报和运输问题产生额外成本。从美国海…

作者头像 李华
网站建设 2026/6/10 7:41:32

如何用QuickCut解决视频处理难题:开源视频处理神器的终极指南

如何用QuickCut解决视频处理难题:开源视频处理神器的终极指南 【免费下载链接】QuickCut Your most handy video processing software 项目地址: https://gitcode.com/gh_mirrors/qu/QuickCut QuickCut是一款面向普通用户的轻量级开源视频处理工具&#xff0…

作者头像 李华
网站建设 2026/6/10 7:41:24

智慧职教刷课脚本终极指南:3分钟实现学习自动化

智慧职教刷课脚本终极指南:3分钟实现学习自动化 【免费下载链接】auto-play-course 简单好用的刷课脚本[支持平台:职教云,智慧职教,资源库] 项目地址: https://gitcode.com/gh_mirrors/hc/auto-play-course 还在为职业教育平台的海量课程任务感到头疼吗&…

作者头像 李华