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

了解pip._vendor.urllib3.util.retry.Retry的from_int()方法实现网络请求重试策略

发布时间:2023-12-26 15:35:15

pip._vendor.urllib3.util.retry.Retry是urllib3库中用于实现网络请求重试策略的类。该类提供了from_int()方法,用于根据给定的整数值创建一个Retry对象,以定义网络请求的重试策略。

from_int()方法的定义如下:

@classmethod
def from_int(cls, retries, redirect=None, raise_on_redirect=None, raise_on_status=None, history=None,
             respect_retry_after_header=True, connect=None, read=None, redirect_pool=None,
             method_whitelist=None, status_forcelist=None, backoff_factor=0, remove_headers_on_redirect=None,
             pool=None, total=None, connect_by_ip=None, status_count=None, backoff_max=None):
    ...

from_int()方法的参数如下:

- retries:请求重试次数,默认为3次。

- redirect:定义请求重定向时是否进行重试,默认为None。

- raise_on_redirect:定义请求重定向时是否抛出MaxRetryError异常,默认为None。

- raise_on_status:定义请求返回非成功状态码时是否抛出HTTPError异常,默认为None。

- history:定义是否记录请求的历史,默认为None。

- respect_retry_after_header:定义是否遵守服务器返回的Retry-After头部字段,默认为True。

- connect:定义请求连接超时时间,默认为None。

- read:定义请求读取超时时间,默认为None。

- redirect_pool:定义重定向次数,默认为None。

- method_whitelist:定义允许请求方法的白名单,默认为None。

- status_forcelist:定义被强制重试的状态码列表,默认为None。

- backoff_factor:定义重试之间的退避因子,默认为0,即无退避。

- remove_headers_on_redirect:定义重定向时需删除的头部字段,默认为None。

- pool:定义连接池的最大数量,默认为None。

- total:定义最大请求次数,默认为None。

- connect_by_ip:定义是否使用IP地址连接,默认为None。

- status_count:定义请求返回状态码的计数器,默认为None。

- backoff_max:定义最大重试次数,默认为None。

下面是一个使用例子:

import requests
from pip._vendor.urllib3.util.retry import Retry
from pip._vendor.urllib3.util import Retry

retry = Retry.from_int(5, backoff_factor=0.5, status_forcelist=[401, 404, 500])

session = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)

response = session.get('http://www.example.com')
print(response.text)

在上面的例子中,我们首先通过Retry.from_int()方法创建了一个Retry对象,设置了最大重试次数为5次,退避因子为0.5,定义了一些需要强制重试的状态码。

然后,我们创建了一个requests.Session对象,并将Retry对象传递给HTTPAdapter的max_retries参数,将HTTPAdapter挂载到Session上。

最后,我们使用Session对象发送了一个HTTP GET请求,并打印了返回的响应内容。

这样,就使用了pip._vendor.urllib3.util.retry.Retry类的from_int()方法实现了一个具有网络请求重试策略的例子。