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

pip._vendor.urllib3.util.retry.Retry的源码解析与分析

发布时间:2023-12-18 13:31:59

pip._vendor.urllib3.util.retry.Retryurllib3库中的一个重试类,它提供了对请求的重试的控制及配置。

以下是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的源码解析与分析,并给出了一个基本的使用例子。