使用requests.packages.urllib3.util.retryRetry()进行请求重试
发布时间:2023-12-24 18:02:50
requests是一个常用的第三方库,通过它我们可以方便地发送HTTP请求。但有时候,网络请求可能会失败,这时候我们可以使用Retry类来进行重试。
Retry是requests库的urllib3.util.retry模块中的一个类,它提供了一些方法和属性来控制重试的行为。下面我们来看一个使用例子。
import requests
from requests.packages.urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
# 创建一个Retry对象
retry = Retry(
total=5, # 最多重试5次
backoff_factor=0.1, # 重试等待时间的指数衰减因子,后续等待时间为前一次的等待时间乘以衰减因子
status_forcelist=[500, 502, 503, 504], # 遇到这些状态码时触发重试
method_whitelist=frozenset(['GET']), # 只对GET请求进行重试
)
# 创建一个Session对象,并将Retry对象绑定到这个Session
session = requests.Session()
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
# 发送请求
response = session.get('https://www.example.com')
# 打印请求的结果
print(response.text)
在上面的例子中,我们通过Retry类创建了一个重试对象,将最大重试次数设置为5次,重试等待时间的指数衰减因子设置为0.1,指定了当遇到500、502、503、504状态码时触发重试,并只对GET请求进行重试。
然后,我们创建了一个Session对象,并将Retry对象绑定到这个Session。这样,我们在发送请求时,会自动对请求进行重试。
最后,我们使用session.get()方法发送了一个GET请求,并将请求结果打印出来。由于我们设置了最多重试5次,所以即使请求失败了,也会进行重试,直到达到最大重试次数或请求成功。
总结来说,Retry类是requests库的一个强大的重试机制,可以帮助我们应对网络请求失败的情况。通过设置重试次数、重试等待时间、需要触发重试的状态码等参数,我们可以灵活地控制重试的行为,提高请求的稳定性和成功率。
