与旧版请求相关的问题:Can I set max_retries for requests.request?
我没有看到在max_retries
或requests.get()
电话中干净地合并requests.post()
的示例。
会爱上
requests.get(url, max_retries=num_max_retries))
实施
答案 0 :(得分:30)
使用Session
时,python-requests docs会reveal exactly how to set max_retries
快速搜索。
直接从文档中提取代码:
import requests
s = requests.Session()
a = requests.adapters.HTTPAdapter(max_retries=3)
b = requests.adapters.HTTPAdapter(max_retries=3)
s.mount('http://', a)
s.mount('https://', b)
s.get(url)
但是,您正在寻找的内容由于以下几个原因而无法配置:
请求不再提供配置方法
重试次数特定于所使用的适配器,而不是会话或特定请求。
如果一个请求需要一个特定的最大请求数,那对于不同的请求就足够了。
此更改是在一年多前的请求1.0中引入的。我们故意将它保留为2.0,因为它最有意义。我们也不会引入参数来配置最大重试次数或其他任何内容,以防您在考虑询问。
编辑使用类似的方法,您可以更好地控制重试的工作方式。您可以阅读this以获得良好的感觉。简而言之,您需要从Retry
导入urllib3
类(见下文),并告诉它如何表现。我们将其传递给urllib3
,您将有更好的选项来处理重试。
from requests.packages.urllib3 import Retry
import requests
# Create a session
s = requests.Session()
# Define your retries for http and https urls
http_retries = Retry(...)
https_retries = Retry(...)
# Create adapters with the retry logic for each
http = requests.adapters.HTTPAdapter(max_retries=http_retries)
https = requests.adapters.HTTPAdapter(max_retries=https_retries)
# Replace the session's original adapters
s.mount('http://', http)
s.mount('https://', https)
# Start using the session
s.get(url)