Python中的requests.packages.urllib3.util.retryRetry()详细介绍和使用示例
在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即可。
