Python Requests:54K Star,HTTP 库的默认答案
Python Requests:54K Star,HTTP 库的默认答案
Requests 在 GitHub 上拿到 54K Star 了,周下载量 3 亿次,被 400 万以上个项目依赖。
这是 Kenneth Reitz 在 2011 年开源的一个 Python HTTP 库,口号是 "HTTP for Humans",意思是把 HTTP 还给人类而不是机器。十几年过去,它成了 Python 开发者发 HTTP 请求的标准做法。

1、urllib 有多难用,Requests 就有多好用
Python 标准库自带了 urllib,听起来挺够用了。实际用起来是这样的:
import urllib.request
import urllib.parse
url = 'https://httpbin.org/post'
data = urllib.parse.urlencode({'key': 'value'}).encode()
req = urllib.request.Request(url, data=data)
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
with urllib.request.urlopen(req) as response:
print(response.read().decode())
在 Requests 里只需要:
import requests
r = requests.post('https://httpbin.org/post', data={'key': 'value'})
print(r.text)
不需要手动编码参数、不需要手动设置 Header、不需要用 context manager 关连接。Requests 把 HTTP 协议细节收进了合理的默认值里,你只管发请求拿结果。
2、哪些功能让开发者离不开它
解决 urllib 的痛点是入门。Requests 真正让人留下来的,是围绕 HTTP 会话的一套设计。
Session 与 Cookie。登录后,后续请求自动携带 Cookie:
s = requests.Session()
s.post('https://example.com/login', data={'user': 'me', 'pass': 'secret'})
r = s.get('https://example.com/dashboard') # 自动带登录态
自动解码。服务端返回 gzip 或 deflate 压缩,Requests 自己解压。JSON 用 r.json() 一行拿到 dict。
SSL 与超时。证书校验默认开启。超时设 timeout=5,避免永远挂住。
认证。Basic Auth、Digest Auth 内置好,传 tuple:auth=('user', 'pass')。
文件上传与流式下载。files={'report': open('report.pdf', 'rb')} 和 stream=True,处理大文件不占内存。
再加 Keep-Alive 连接池、SOCKS 代理、分块传输。Requests 覆盖了生产 HTTP 客户端需要的所有能力,不是最全的,但是刚好够用。

3、安装和版本
python -m pip install requests
建议 python -m pip,避免多版本 Python 下的路径混乱。当前支持 Python 3.10+。还在用 Python 2 的话,Requests 2.27 是最后兼容版,但 Python 2 已停维,该升了。
4、适合的人
- 用 Python 调 API、写爬虫、对接后台,Requests 是绕不过的基础库
- 刚学 Python 想接触 HTTP 编程,读官方 Quickstart 就能上手
- 在维护老项目、被 urllib 的样板代码拖着的开发者,换 Requests 能删一半 HTTP 代码
Requests 没发明什么新东西。它把 HTTP 这件事做到位了,用项目原话说,对使用者来说是一件"简单而优雅"的事。这个判断放在十几年前成立,放在今天也一样。
浙公网安备 33010602011771号