第 4 章 · 请求参数详解
本章目标:掌握 Headers、Cookies、认证方式和查询参数的完整配置方法。
4.1 自定义请求头
HTTP 请求头包含客户端能力、身份认证等信息:
python
import requests
# 方法一:直接传入 headers 字典
resp = requests.get(
'https://httpbin.org/headers',
headers={
'User-Agent': 'MyApp/1.0 (contact@example.com)',
'Accept': 'application/json',
'Authorization': 'Bearer token123'
}
)
# 方法二:使用内置会话(见第 6 章)
session = requests.Session()
session.headers.update({
'User-Agent': 'MyApp/1.0',
'Accept': 'application/json'
})
resp = session.get('https://httpbin.org/headers')常用请求头:
User-Agent:客户端标识Accept:期望的响应类型Authorization:认证凭证Content-Type:请求体类型Referer:来源页面
4.2 Cookie 管理
requests 自动处理 Cookie,支持手动设置:
python
import requests
# 设置 Cookie
cookies = {'session_id': 'abc123', 'user': 'zhangsan'}
resp = requests.get('https://httpbin.org/cookies', cookies=cookies)
# 查看服务器设置的 Cookie
resp = requests.get('https://httpbin.org/cookies/set/name/value')
print(resp.cookies['name']) # 'value'
# CookieJar 对象(支持持久化)
jar = requests.cookies.RequestsCookieJar()
jar.set('session', 'xyz', domain='.example.com', path='/')
resp = requests.get('https://example.com', cookies=jar)4.3 认证方式
Basic Auth
python
import requests
# 方式一:元组参数
resp = requests.get(
'https://httpbin.org/basic-auth/user/passwd',
auth=('user', 'passwd')
)
# 方式二:HTTPBasicAuth 对象
from requests.auth import HTTPBasicAuth
resp = requests.get(url, auth=HTTPBasicAuth('user', 'passwd'))Token 认证
python
import requests
# Bearer Token
headers = {'Authorization': 'Bearer eyJhbGc...'}
resp = requests.get('https://api.example.com/user', headers=headers)
# API Key(通常放在 Header 或 Query 中)
headers = {'X-API-Key': 'sk-xxx'}
params = {'api_key': 'sk-xxx'}OAuth 2.0
python
import requests
# 使用 requests-oauthlib 库
from requests_oauthlib import OAuth2Session
oauth = OAuth2Session(
client_id='your_client_id',
token={'access_token': 'xxx', 'token_type': 'Bearer'}
)
resp = oauth.get('https://api.example.com/me')4.4 查询参数进阶
python
import requests
# 基础查询参数
params = {'page': 1, 'per_page': 20}
resp = requests.get('https://api.github.com/search/repositories', params=params)
# 列表参数(重复 key)
params = {'tags': ['python', 'ai', 'web']}
resp = requests.get('https://example.com/api', params=params)
# 编码为: ?tags=python&tags=ai&tags=web
# 嵌套参数(部分 API 支持)
params = {'filter[name]': '张三', 'filter[age]': '30'}
resp = requests.get('https://example.com/api', params=params)4.5 httpx 的请求参数
httpx 的 API 与 requests 几乎一致:
python
import httpx
# Headers
resp = httpx.get(url, headers={'User-Agent': 'httpx'})
# Cookies
resp = httpx.get(url, cookies={'session': 'abc'})
# Auth
resp = httpx.get(url, auth=('user', 'pass'))
# Query params
resp = httpx.get(url, params={'key': 'value'})4.6 本章小结
- Headers 通过
headers字典参数传入; - Cookies 通过
cookies参数或 CookieJar 管理; - Basic Auth 使用
auth参数元组或 HTTPBasicAuth 对象; - 查询参数通过
params参数传递,支持列表和嵌套。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. requests.get() 的 auth 参数接受什么格式?
2. 以下哪个请求头用于指定客户端标识?
3. Cookie 与 Session 的主要区别是?
4. httpx 的请求参数与 requests 相比?
🛠️ 动手实践
- 设置自定义 User-Agent 和 Accept 头,向 httpbin 发送请求并查看响应。
- 使用 Basic Auth 访问
https://httpbin.org/basic-auth/user/passwd。 - 构造包含列表参数的查询,验证 URL 编码结果。