retry_strategy = Retry(
total=3,
backoff_factor=0.5,
status_forcelist=[500, 502, 503, 504],
allowed_methods=["GET"] # 使用 allowed_methods 参数代替 method_whitelist 参数
)
session = requests.Session()
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
response_target = session.get(url, headers=headers)
response_data = response_target.json()
首先,创建了一个 Retry
对象,该对象指定了以下参数:
total
:设置最大重试次数为 3 次;backoff_factor
:设置退避因子为 0.5,表示每次重试之间的等待时间会逐渐增加;status_forcelist
:指定当响应状态码为 500、502、503 或 504 时触发重试;allowed_methods
:指定只有 GET 方法的请求才会被重试。
然后,创建了一个 requests.Session
对象,该对象是用来发送 HTTP 请求的会话对象。
接下来,创建了一个 HTTPAdapter
对象,并将其挂载到会话对象上。HTTPAdapter
是用于处理不同协议的适配器,这里我们将其挂载到 "http://" 和 "https://" 前缀的请求上。
通过这样的配置,当发送的请求出现连接失败或者遇到指定的响应状态码时,会自动进行重试,最多重试 3 次。重试的等待时间会逐渐增加,以防止频繁请求导致的负荷过大。只有 GET 方法的请求会被重试,其他方法的请求不会进行重试。这样可以提高请求的稳定性和可靠性。