HTTP 请求库:requests & httpx
本章目标:理解 Python HTTP 客户端生态,掌握 requests 与 httpx 的定位差异,安装配置开发环境。
1.1 为什么需要 HTTP 客户端库
Python 标准库提供了 urllib,但它的 API 原始、冗长。生产环境中,开发者几乎都会选择第三方库:
python
# 标准库 urllib — 需要手动处理编码、关闭连接
import urllib.request
req = urllib.request.Request('https://api.github.com/user', headers={'User-Agent': 'python'})
with urllib.request.urlopen(req) as resp:
data = resp.read().decode('utf-8')
# requests — 一行搞定
import requests
resp = requests.get('https://api.github.com/user')
print(resp.json())requests 在 2011 年发布后迅速成为 Python HTTP 的事实标准。2020 年后,httpx 作为"现代版 requests"登场,提供原生异步支持和HTTP/2。
1.2 requests vs httpx 对比
| 特性 | requests | httpx |
|---|---|---|
| API 风格 | 同步,简洁 | 同步 + 异步双 API |
| HTTP/2 | ❌ | ✅ |
| WebSocket | ❌ | ✅ |
| 类型注解 | ❌ | ✅ (Pydantic) |
| 流式响应 | 支持 | 支持 |
| 生态成熟度 | 极成熟 | 快速成长 |
| 适用场景 | 脚本、CLI、传统项目 | 现代异步应用、API 客户端 |
学习路线建议:
- 先学 requests( API 简单,资料多)
- 再学 httpx(补充异步能力)
- 两者 API 高度兼容,切换成本低
1.3 安装与环境配置
bash
# 安装 requests
pip install requests
# 安装 httpx(含 http2 支持需要额外依赖)
pip install httpx
pip install "httpx[http2]" # 如需 HTTP/2 支持
# 验证安装
python -c "import requests; print(requests.__version__)"
python -c "import httpx; print(httpx.__version__)"推荐使用 uv 或 poetry 管理依赖,保持环境隔离。
1.4 第一个请求:GET 一个 API
python
import requests
# 最简单的 GET 请求
resp = requests.get('https://httpbin.org/get')
# 检查状态码
print(resp.status_code) # 200
# 自动 JSON 解析
data = resp.json()
print(data['headers'])
# 文本响应
print(resp.text[:100])1.5 本章小结
- Python HTTP 客户端主要有 requests(同步老牌)和 httpx(现代全功能)两大选择;
- requests API 简洁,httpx 提供异步和 HTTP/2;
- 两者 API 相似,掌握其一后学习另一个很快。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. 以下哪个库提供原生异步 HTTP 支持?
2. requests 库的作者是谁?
3. httpx 相比 requests 新增的核心特性不包括?
4. 安装 httpx 并启用 HTTP/2 支持的命令是?
🛠️ 动手实践
- 安装 requests 和 httpx,打印两个库的版本号。
- 用 requests 访问
https://httpbin.org/get,打印响应状态码和 headers。 - 用 httpx 完成同样的请求,对比两者的 API 差异。