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

Python中requests.packages.urllib3.util.retryRetry()模块详解及实例演示

发布时间:2023-12-24 18:07:35

在Python中,有一个受欢迎的HTTP访问库叫做requests。它提供了简洁的API,用于向服务器发送HTTP请求并获取响应。requests库具有很多有用的功能,而其中之一就是重试机制。重试机制可以在请求失败时重新发送请求。

requests库内部使用urllib3库来处理HTTP连接和请求。urllib3库的连接管理器中包含了一个重试机制。在使用requests库发送请求时,默认情况下,如果出现连接错误或响应错误,requests库会自动重试请求三次。

在requests库底层的urllib3库中,有一个名为“requests.packages.urllib3.util.retry”的模块,提供了更多的重试选项。Retry()类是其重要的组成部分。

下面是Retry()类的构造函数及其参数的解释:

Retry(total=10,
      connect=5,
      read=5,
      redirect=5,
      status=5,
      backoff_factor=0.1,
      method_whitelist=frozenset(['HEAD', 'TRACE', 'GET', 'PUT', 'OPTIONS', 'DELETE', 'POST']),
      status_forcelist=[500, 502, 503, 504])

- total:重试次数,默认为10次。

- connect:对请求错误或连接失败进行重试的次数,默认为5次。

- read:对读取错误进行重试的次数,默认为5次。

- redirect:对重定向错误进行重试的次数,默认为5次。

- status:对HTTP请求返回错误状态码(例如500、502等)进行重试的次数,默认为5次。

- backoff_factor:重试的退避因子,即在多次重试之间的等待时间的指数衰减因子,默认为0.1。

- method_whitelist:允许进行重试的HTTP请求方法,默认为HEAD、TRACE、GET、PUT、OPTIONS、DELETE和POST。

- status_forcelist:强制进行重试的HTTP状态码,默认为500、502、503和504。

下面是使用Retry()类的一个简单实例演示:

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

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

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

在这个例子中,我们创建了一个Retry()对象,并将其传递给HTTPAdapter()类的max_retries参数。然后,我们使用requests库的Session()类创建了一个会话对象,并将HTTPAdapter对象传递给它。接下来,我们使用会话对象发送了一个HTTP GET请求,并使用print()函数打印了响应的状态码。

在上面的代码中,我们配置了重试策略为最多重试3次,当响应的状态码为500、502、503或504时进行重试,重试的退避因子为0.1。这意味着,如果请求失败,则会等待约0.1秒后重新发送请求。最多重试3次后,如果仍然失败,则会引发异常。

总结来说,Retry()类是urllib3库中用于重试机制的一个重要组件,可以更灵活地配置请求的重试次数和退避因子等选项。通过使用Retry()类,我们可以提高请求的可靠性和稳定性,保证请求的成功率。