Python HTTP客户端库requests的高级用法

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库允许你为请求设置超时时间,并可以使用第三方库(如urllib3Retry类)来实现重试逻辑。

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库来处理各种复杂的网络请求场景。

猜你喜欢

转载自blog.csdn.net/weixin_73725158/article/details/143424569