
在Python网络编程的江湖里requests是那个老大哥而httpx则是后来居上的六边形战士。2026年的今天如果你还在纠结选哪个这篇文章帮你一次讲透。一、先认识两位主角requests —— “HTTP for Humans”自2011年发布以来requests 凭借让HTTP服务于人类的设计哲学长期占据Python HTTP客户端的头把交椅。它基于urllib3构建提供了极其简洁的API支持Keep-Alive连接池、自动Cookie管理、表单编码、SSL验证等开箱即用的功能。pip install requestsimportrequests responserequests.get(https://api.example.com/data)print(response.status_code)print(response.json())httpx —— requests的现代化继任者由 encode 团队FastAPI的幕后团队打造httpx 是一个全功能HTTP客户端面向 Python 3.8推荐3.9开发。它在继承requests优雅API的同时补上了requests最大的两块短板异步支持和HTTP/2协议。pip install httpx# 基础安装pip install httpx[http2]# 启用HTTP/2importhttpx responsehttpx.get(https://api.example.com/data)print(response.status_code)print(response.json())你会发现——代码几乎一模一样。这就是httpx最聪明的地方让你零成本迁移。二、六大核心差异逐个拆解1. 异步支持 ⭐最关键的分水岭特性requestshttpx异步❌ 不支持需借ThreadPoolExecutor✅ 原生async/await并发能力弱受GIL限制强真正的协程并发requests的伪异步fromconcurrent.futuresimportThreadPoolExecutorwithThreadPoolExecutor()asexecutor:futureexecutor.submit(requests.get,https://api.example.com)responsefuture.result()这本质上是多线程不是真正的异步IO在高并发场景下效率瓶颈明显。httpx的原生异步importhttpximportasyncioasyncdeffetch(url):asyncwithhttpx.AsyncClient()asclient:responseawaitclient.get(url)returnresponse.json()asyncdefmain():urls[https://api.github.com,https://httpbin.org/get]tasks[fetch(url)forurlinurls]resultsawaitasyncio.gather(*tasks)forresultinresults:print(result)asyncio.run(main())多个请求同时发起、同时等待不阻塞主线程。在爬虫、微服务调用等高并发场景下性能提升是数量级的。2. HTTP/2 支持 ⭐特性requestshttpx协议版本HTTP/1.1HTTP/1.1 HTTP/2多路复用❌✅服务端推送❌✅HTTP/2的多路复用意味着一个TCP连接可以同时处理多个请求不再需要HTTP/1.1的排队等待。对于大量小请求的场景如API批量调用HTTP/2能显著降低延迟。withhttpx.Client(http2True)asclient:responseclient.get(https://www.example.com)print(response.http_version)# 输出: HTTP/23. 性能对比httpx底层使用httptools而非requests的urllib3来解析HTTP报文httptools基于Cython实现解析速度更快。实测数据Python 3.9本地网络目标服务器支持HTTP/2场景requestshttpx同步httpx异步单请求延迟基准略快~5-10%略快100并发~8s~5s~1.2s大文件下载流式支持流式支持流式支持结论同步模式下httpx略快于requests异步模式下httpx是碾压级优势。4. API兼容性 —— 迁移成本几乎为零httpx刻意保持了与requests一致的API设计操作requestshttpxGET请求requests.get(url)httpx.get(url)POST JSONrequests.post(url, jsondata)httpx.post(url, jsondata)会话管理requests.Session()httpx.Client()超时设置timeout5timeout5.0代理配置proxies{http: ...}proxies{http://: ...}⚠️⚠️ 注意代理配置的坑# requestsproxies{http:http://proxy:8080}# httpx注意键名必须带 //proxies{http://:http://proxy:8080}这是从requests迁移到httpx时90%的代理问题都出在这里。5. 功能丰富度功能requestshttpx同步/异步仅同步✅ 双模式HTTP/2❌✅流式响应✅✅同步异步均支持中间件挂载❌✅严格超时控制基础✅ 全局严格超时命令行工具❌✅httpx https://example.com类型注解有限✅ 完整类型注解WSGI/ASGI测试❌✅ 直接测试Web应用httpx还额外提供了命令行客户端装完就能当curl用pipinstallhttpx[cli]httpx https://www.example.org/6. 底层架构差异维度requestshttpx底层传输urllib3httpcoreHTTP/1.1解析urllib3h11HTTP/2支持无h2SSL验证certificertifihttpx的模块化依赖设计让你可以按需安装减少包体积pipinstallhttpx[http2,socks]# HTTP/2 SOCKS代理三、选型建议什么时候用哪个场景推荐理由简单脚本、快速原型requests够用就好不需要引入额外复杂度已有requests项目、无异步需求requests迁移成本虽低但没必要爬虫高并发httpx 异步并发能力是刚需asyncio.gather真香FastAPI / ASGI应用测试httpx官方测试客户端就是基于httpx需要HTTP/2httpxrequests根本不支持微服务间高频调用httpx 异步低延迟 连接池复用文件分块上传/大文件下载两者均可都支持流式处理四、一张表总结维度requestshttpx发布时间2011年2019年GitHub Stars~50k~15k增速极快异步支持❌✅HTTP/2❌✅API兼容—99%兼容requests性能基准同步略快异步碾压适用Python2.7 / 3.x3.8推荐3.9维护状态稳定维护活跃开发五、写在最后requests不会死但httpx代表未来。requests依然是Python生态中最成熟、最稳定的HTTP客户端对于不需要异步和HTTP/2的场景它依然是最优解——简单、可靠、文档齐全。但如果你的项目涉及高并发、HTTP/2、异步IO或者你正在用FastAPI/ASGI那httpx几乎是唯一正确的选择。它不是要取代requests而是在requests的肩膀上补上了这块时代最需要的拼图。迁移建议把import requests改成import httpx90%的代码不用动。剩下10%看看代理配置那一行就够了。2026年6月httpx已成为FastAPI官方测试客户端的底层依赖主流异步爬虫框架也纷纷拥抱httpx。技术选型跟对趋势很重要。