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

Python中的requests.packages.urllib3.util.retryRetry()详细介绍和使用示例

发布时间:2023-12-11 11:29:52

在Python的requests库中,requests.packages.urllib3.util.retry模块提供了Retry类,用于处理请求的重试机制。该模块提供了一些用于自定义重试策略的功能,可以在请求失败时进行自动重试,以增强请求的稳定性和可靠性。

Retry类的构造函数如下:

__init__(self, total:int=10, backoff_factor:float=0.1,
            status_forcelist:Dict[int, Union[str, Tuple]]=None,
            method_whitelist:Tuple[str, ...]=('HEAD', 'GET', 'PUT', 'DELETE',
                                               'OPTIONS', 'TRACE'),
            raise_on_status:bool=False,
            raise_on_redirect:bool=False,
            raise_on_expire:bool=True,
            redirect_max:int=None,
            redirect:bool=True,
            respect_retry_after_header:int=0,
            remove_headers_on_redirect:Tuple[str]=('Authorization',),
            backoff_max:float=None,
            status_codes_to_retry:Tuple[int, ...]=RETRY_AFTER_STATUS_CODES,
            raise_on_status_code:bool=False):

参数解释:

- total: 进行最大重试的次数,默认为10

- backoff_factor: 重试间隔的退避因子,默认为0.1,即每次重试的时间间隔逐渐增加

- status_forcelist: 需要进行重试的HTTP状态码列表,默认为None,即对所有状态码都进行重试

- method_whitelist: 需要进行重试的HTTP请求方法,默认为('HEAD', 'GET', 'PUT', 'DELETE', 'OPTIONS', 'TRACE')

- raise_on_status: 如果请求返回的状态码不在status_forcelist中,是否抛出异常,默认为False

- raise_on_redirect: 如果请求发生了重定向,是否抛出异常,默认为False

- raise_on_expire: 如果超过了最大重试次数,是否抛出异常,默认为True

- redirect_max: 最大的重定向次数,默认为None,表示不限制重定向次数

- redirect: 是否允许请求进行重定向,默认为True

- respect_retry_after_header: 是否遵循响应的Retry-After头部字段指示的重试间隔,默认为0,即不遵循

- remove_headers_on_redirect: 在重定向时需要删除的请求头部字段名列表,默认为('Authorization',)

- backoff_max: 重试间隔的最大值,默认为None,表示没有最大值

- status_codes_to_retry: 需要进行重试的HTTP状态码列表,默认为RETRY_AFTER_STATUS_CODES

- raise_on_status_code: 如果请求返回的状态码不在status_codes_to_retry中,是否抛出异常,默认为False

使用Retry类的示例代码如下:

import requests
from requests.packages.urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter

retry = Retry(total=5, backoff_factor=0.1, status_forcelist=[ 500, 502, 503, 504 ])
adapter = HTTPAdapter(max_retries=retry)
http = requests.Session()
http.mount("https://", adapter)
http.mount("http://", adapter)

response = http.get('http://example.com')
print(response.status_code)

在上面的示例中,Retry类的实例retry被传递给HTTPAdapter类的构造函数,然后通过http.mount()方法将HTTPAdapter实例与Session实例http相关联,使得http会根据retry的设置进行重试。

在请求的过程中,如果发生了5xx系列的HTTP状态码,比如500、502、503、504等,会根据重试设置进行自动重试,默认最大重试次数为5,每次重试的时间间隔按照0.1的退避因子递增,并且将返回的响应赋值给response变量。

最后,打印response的状态码status_code即可。