requests库是Python中一个非常流行的HTTP客户端库,它提供了简单易用的API来发送HTTP请求并处理响应。除了基本的GET和POST请求外,requests库还支持许多高级用法,使得它能够应对更复杂的网络请求场景。
1. 会话对象(Session Objects)
requests.Session()对象允许你跨请求保持某些参数,比如cookies、headers和认证信息。这对于需要多个请求来完成的操作特别有用,比如登录到网站后访问受保护的资源。
python复制代码
import requests |
|
session = requests.Session() |
|
# 设置会话级别的headers |
|
session.headers.update({ 'User-Agent': 'my-app/0.0.1'}) |
|
# 发送请求,使用会话对象自动管理cookies等 |
|
response = session.get('http://example.com') |
2. 超时和重试
在处理网络请求时,超时和重试机制是非常重要的。requests库允许你为请求设置超时时间,并可以使用第三方库(如urllib3的Retry类)来实现重试逻辑。
python复制代码
from requests.adapters import HTTPAdapter |
|
from urllib3.util.retry import Retry |
|
# 创建一个重试策略 |
|
retry_strategy = Retry( |
|
total=3, # 总共重试次数 |
|
status_forcelist=[500, 502, 503, 504], # 对哪些状态码进行重试 |
|
method_whitelist=["HEAD", "GET", "OPTIONS"] # 对哪些HTTP方法进行重试 |
|
) |
|
# 创建一个适配器并应用重试策略 |
|
adapter = HTTPAdapter(max_retries=retry_strategy) |
|
# 创建一个会话对象并挂载适配器 |
|
session = requests.Session() |
|
session.mount("http://", adapter) |
|
session.mount("https://", adapter) |
3. 文件上传和下载
requests库支持文件的上传和下载。对于文件上传,你可以将文件对象作为files参数的一部分传递给请求方法。对于文件下载,你可以将响应内容保存到文件中。
python复制代码
# 文件上传 |
|
files = { 'file': open('report.xls', 'rb')} |
|
response = requests.post('http://example.com/upload', files=files) |
|
# 文件下载 |
|
response = requests.get('http://example.com/largefile.zip', stream=True) |
|
with open('largefile.zip', 'wb') as f: |
|
for chunk in response.iter_content(chunk_size=8192): |
|
f.write(chunk) |
4. 代理支持
requests库允许你通过proxies参数来设置HTTP和HTTPS代理。这对于需要通过特定代理服务器访问网络资源的场景非常有用。
python复制代码
proxies = { |
|
'http': 'http://10.10.1.10:3128', |
|
'https': 'http://10.10.1.10:1080', |
|
} |
|
response = requests.get('http://example.com', proxies=proxies) |
5. SSL验证
在处理HTTPS请求时,requests库默认会验证SSL证书。如果你需要忽略SSL验证(例如,在测试环境中),可以将verify参数设置为False。但请注意,这样做会降低安全性,因为它会使你容易受到中间人攻击。
python复制代码
response = requests.get('https://example.com', verify=False) |
通过掌握这些高级用法,你可以更加灵活和高效地使用requests库来处理各种复杂的网络请求场景。