欢迎访问宙启技术站
智能推送

使用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库的一个强大的重试机制,可以帮助我们应对网络请求失败的情况。通过设置重试次数、重试等待时间、需要触发重试的状态码等参数,我们可以灵活地控制重试的行为,提高请求的稳定性和成功率。