Python 网络请求 requests
学习用requests库发送HTTP请求 · 难度:高级 · +15XP
Python 网络请求 requests
requests 是 Python 中用于发送 HTTP 请求的第三方库,被称为"HTTP for Humans"。它简洁直观的 API 设计使得发送网络请求变得极其容易。requests 底层基于 urllib3,提供了连接池、Keep-Alive、SSL 验证等高级功能。
安装与基本使用
# pip install requests
import requests
# GET 请求
r = requests.get('https://httpbin.org/get')
print(r.status_code) # 200
print(r.text) # 响应文本
# POST 请求
r = requests.post('https://httpbin.org/post', data={'key': 'value'})
# PUT, DELETE, HEAD, OPTIONS 请求同理
r = requests.put('https://httpbin.org/put')
r = requests.delete('https://httpbin.org/delete')
传递参数与请求体
import requests
# URL 查询参数
payload = {'page': 2, 'count': 25}
r = requests.get('https://httpbin.org/get', params=payload)
# 表单数据
r = requests.post('https://httpbin.org/post', data={'username': 'admin', 'password': 'pass'})
# 发送 JSON 数据
r = requests.post('https://httpbin.org/post', json={'name': 'Alice', 'age': 25})
# 文件上传
files = {'file': open('report.txt', 'rb')}
r = requests.post('https://httpbin.org/post', files=files)
响应内容处理
import requests
r = requests.get('https://api.github.com')
print(r.status_code) # 状态码
print(r.headers) # 响应头字典
print(r.headers['Content-Type'])
print(r.encoding) # 编码
print(r.text) # 文本响应
print(r.content) # 二进制响应
print(r.json()) # JSON 响应 (自动解析)
print(r.url) # 最终 URL (可能经过重定向)
print(r.history) # 重定向历史
print(r.elapsed) # 请求耗时
会话对象与持久连接
import requests
# Session 对象可以保持 cookie 和连接池
session = requests.Session()
# 设置默认请求头
session.headers.update({'User-Agent': 'MyApp/1.0'})
# 登录
login_data = {'username': 'user', 'password': 'pass'}
session.post('https://example.com/login', data=login_data)
# 后续请求自动携带 cookie
r = session.get('https://example.com/dashboard')
响应对象属性速查表
| 属性/方法 | 说明 |
|---|---|
| r.status_code | HTTP 状态码 |
| r.text | Unicode 文本响应 |
| r.content | 二进制响应 (bytes) |
| r.json() | 将 JSON 响应解析为字典 |
| r.headers | 响应头字典 |
| r.cookies | 响应 cookie |
| r.encoding | 响应编码 (可修改) |
| r.raise_for_status() | 检查 HTTP 错误并抛出异常 |