pip._vendor.urllib3.util.retry.Retry的源码解析与分析
发布时间:2023-12-18 13:31:59
pip._vendor.urllib3.util.retry.Retry是urllib3库中的一个重试类,它提供了对请求的重试的控制及配置。
以下是pip._vendor.urllib3.util.retry.Retry的源码解析和分析。
## 类定义
class Retry(object):
def __init__(self,
total=10,
connect=None,
read=None,
redirect=None,
status=None,
method_whitelist=_METHODS_SAFE_TO_RETRY,
status_forcelist=None,
backoff_factor=0,
raise_on_status=True,
raise_on_redirect=True,
raise_on_read_timeout=True,
raise_on_connect_timeout=True,
allowed_methods=Frozenset(['GET', 'HEAD']),
remove_headers_on_redirect=[],
remove_headers_on_request=[],
respect_retry_after_header=True,
backoff_max=None):
"""
初始化Retry对象。
Parameters:
- total:重试次数上限,默认为10。
- connect:可以重试的连接错误码,默认为None。
- read:可以重试的读取错误码,默认为None。
- redirect:可以重试的重定向错误码,默认为None。
- status:可以重试的请求的HTTP错误码,默认为None。
- method_whitelist:可以重试的HTTP方法,默认为_METHODS_SAFE_TO_RETRY。
- status_forcelist:强制重试的HTTP错误码,可用于覆盖method_whitelist的默认值。
- backoff_factor:指数回退因子,默认为0,表示不回退。
- raise_on_status:是否在请求失败时抛出异常,默认为True。
- raise_on_redirect:是否在重定向失败时抛出异常,默认为True。
- raise_on_read_timeout:是否在读取超时时抛出异常,默认为True。
- raise_on_connect_timeout:是否在连接超时时抛出异常,默认为True。
- allowed_methods:允许的HTTP方法,默认为['GET', 'HEAD']。
- remove_headers_on_redirect:重定向时需要移除的请求头列表,默认为空。
- remove_headers_on_request:请求时需要移除的请求头列表,默认为空。
- respect_retry_after_header:是否在处理重试之前等待Retry-After header指定的时间,默认为True。
- backoff_max:最大回退时间,默认为None,表示无限制。
"""
...
Retry类的初始化方法接受多个参数来配置重试的各个方面,包括总的重试次数上限、允许重试的错误码、回退策略、是否抛出异常等。
## 例子
下面是一个基本的使用例子,展示了如何使用Retry类对请求进行重试:
import requests
from pip._vendor.urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
# 创建一个Retry对象,最多重试3次
retry = Retry(total=3)
# 创建一个会话
session = requests.Session()
# 创建一个适配器,使用Retry对象进行重试
adapter = HTTPAdapter(max_retries=retry)
# 使用适配器将会话与重试配置关联
session.mount('http://', adapter)
session.mount('https://', adapter)
# 发送请求
response = session.get('http://example.com')
# 打印响应内容
print(response.content)
在上面的例子中,首先创建一个Retry对象,配置最多重试3次。然后创建一个会话对象session,再创建一个适配器对象adapter,将适配器与会话关联起来。最后,使用会话对象发送请求,并打印响应的内容。
通过以上的代码,可以实现对请求的重试,当请求失败时,会自动进行重试,直到达到重试次数上限或者请求成功。
以上就是pip._vendor.urllib3.util.retry.Retry的源码解析与分析,并给出了一个基本的使用例子。
