当前位置: 代码网 > it编程>前端脚本>Python > Python中requests和httpx对比小结

Python中requests和httpx对比小结

2026年07月27日 Python 我要评论
在python网络编程的江湖里,requests 是那个"老大哥",而 httpx 则是后来居上的"六边形战士"。2026年的今天,如果你还在纠结选哪个,这篇文

在python网络编程的江湖里,requests 是那个"老大哥",而 httpx 则是后来居上的"六边形战士"。2026年的今天,如果你还在纠结选哪个,这篇文章帮你一次讲透。

一、先认识两位主角

requests —— “http for humans”

自2011年发布以来,requests 凭借"让http服务于人类"的设计哲学,长期占据python http客户端的头把交椅。它基于 urllib3 构建,提供了极其简洁的api,支持keep-alive连接池、自动cookie管理、表单编码、ssl验证等开箱即用的功能。

pip install requests
import requests

response = requests.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/2
import httpx

response = httpx.get('https://api.example.com/data')
print(response.status_code)
print(response.json())

你会发现——代码几乎一模一样。这就是httpx最聪明的地方:让你零成本迁移。

二、六大核心差异,逐个拆解

1. 异步支持 ⭐(最关键的分水岭)

特性requestshttpx
异步❌ 不支持,需借threadpoolexecutor✅ 原生async/await
并发能力弱,受gil限制强,真正的协程并发

requests的"伪异步":

from concurrent.futures import threadpoolexecutor

with threadpoolexecutor() as executor:
    future = executor.submit(requests.get, 'https://api.example.com')
    response = future.result()

这本质上是多线程,不是真正的异步io,在高并发场景下效率瓶颈明显。

httpx的原生异步:

import httpx
import asyncio

async def fetch(url):
    async with httpx.asyncclient() as client:
        response = await client.get(url)
        return response.json()

async def main():
    urls = [
        'https://api.github.com',
        'https://httpbin.org/get'
    ]
    tasks = [fetch(url) for url in urls]
    results = await asyncio.gather(*tasks)
    for result in results:
        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能显著降低延迟。

with httpx.client(http2=true) as client:
    response = client.get('https://www.example.com')
    print(response.http_version)  # 输出: http/2

3. 性能对比

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设计:

操作requestshttpx
get请求requests.get(url)httpx.get(url)
post jsonrequests.post(url, json=data)httpx.post(url, json=data)
会话管理requests.session()httpx.client()
超时设置timeout=5timeout=5.0
代理配置proxies={'http': ...}proxies={'http://': ...} ⚠️

⚠️ 注意代理配置的坑:

# requests
proxies = {'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用:

pip install 'httpx[cli]'
httpx https://www.example.org/

6. 底层架构差异

维度requestshttpx
底层传输urllib3httpcore
http/1.1解析urllib3h11
http/2支持h2
ssl验证certificertifi

httpx的模块化依赖设计让你可以按需安装,减少包体积:

pip install httpx[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 httpx,90%的代码不用动。剩下10%?看看代理配置那一行就够了。

2026年6月,httpx已成为fastapi官方测试客户端的底层依赖,主流异步爬虫框架也纷纷拥抱httpx。技术选型,跟对趋势很重要。

到此这篇关于python中requests和httpx对比小结的文章就介绍到这了,更多相关python requests httpx内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com