Python中requests.packages.urllib3.util.retryRetry()模块详解及实例演示
在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()类,我们可以提高请求的可靠性和稳定性,保证请求的成功率。
