requests ------ 为人类设计的 Python HTTP 库
官方地址:https://pypi.org/project/requests/
最新版本:2.34.2
协议:Apache-2.0
周下载量:3 亿 +,全球 400 万 + 项目依赖
一、requests 是什么
requests 是 Python 生态中最流行、使用最广泛的 HTTP 客户端库,遵循 HTTP for Humans 设计理念,用极简 API 封装复杂的 HTTP 逻辑,让发送请求、处理响应变得像调用函数一样简单。
它基于 urllib3 构建,自动实现连接池、SSL 校验、Keep-Alive 等能力,广泛用于:
-
接口测试与自动化
-
网络爬虫与数据采集
-
后端服务间调用
-
WebHook / 第三方平台集成
-
运维监控与上报
二、核心特性
PyPI 官方页面明确标注 requests 具备以下生产级能力:
-
支持完整 HTTP 方法:GET/POST/PUT/DELETE/HEAD/OPTIONS
-
自动处理 URL 参数、表单编码、JSON 数据
-
优雅的 Cookie 持久化与 Session 管理
-
浏览器级 TLS/SSL 证书验证
-
Basic/Digest 认证开箱即用
-
自动解压、自动编码识别、Unicode 支持
-
多文件上传、超时控制、连接池复用
-
完美兼容 Python 3.10+ 与 PyPy
三、安装
1. 标准安装
bash
python -m pip install requests
2. 国内镜像加速
bash
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
3. 验证安装
python
import requests
print(requests.__version__) # 输出 2.34.x 表示成功
四、快速上手
1. 发送基础请求
python
import requests
# GET
r = requests.get("https://httpbin.org/get")
# POST
r = requests.post("https://httpbin.org/post", json={"key": "value"})
# 其他方法
# r = requests.put(...)
# r = requests.delete(...)
2. 处理响应
python
r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
print(r.status_code) # 200
print(r.encoding) # utf-8
print(r.headers['Content-Type'])
print(r.text) # 文本
print(r.json()) # 自动解析 JSON
3. 常用写法
带参数 GET
python
params = {"q": "python", "page": 1}
r = requests.get("https://httpbin.org/get", params=params)
自定义请求头
python
headers = {
"User-Agent": "Mozilla/5.0",
"Token": "xxx"
}
r = requests.get("https://httpbin.org/get", headers=headers)
文件上传
python
files = {"file": open("test.jpg", "rb")}
r = requests.post("https://httpbin.org/post", files=files)
会话保持(Cookie 复用)
python
s = requests.Session()
s.get("https://httpbin.org/cookies/set/session/123")
r = s.get("https://httpbin.org/cookies")
五、为什么选择 requests(对比标准库)
| 特性 | urllib / http.client | requests |
|---|---|---|
| 代码量 | 多、繁琐 | 极简、直观 |
| 参数处理 | 手动拼接 | 自动字典传参 |
| 连接池 | 需手动实现 | 自动开启 |
| SSL 验证 | 复杂配置 | 开箱安全 |
| 响应解析 | 手动解码 | 自动 text/json |
| 维护状态 | 困难 | Session 一键搞定 |
requests 让 HTTP 回归简单,让开发者专注业务而非协议细节。
六、使用场景
-
设置超时,避免请求阻塞
pythonr = requests.get(url, timeout=10) -
使用 Session 提升性能(连接复用)
-
关闭不必要验证(内网可信环境)
pythonr = requests.get(url, verify=False) -
捕获异常,提高鲁棒性
pythontry: r = requests.get(url) r.raise_for_status() except Exception as e: print(e) -
大流量场景搭配:
requests\-adapter自定义重试、代理池