Python 如何配置'requests.get(url)`调用并重试而不创建新会话?

Python 如何配置'requests.get(url)`调用并重试而不创建新会话?,python,python-3.x,python-requests,Python,Python 3.x,Python Requests,我想对requests.geturl使用容错,最多重试3次 目前,我创建了一个新会话,并在方法之间传递该会话,我希望避免: with requests.Session() as rs: rs.mount('https://', HTTPAdapter(max_retries=3)) rs.get(url) ... 有没有办法配置requests.geturl调用,以便在服务器失败时重试对服务器的请求?这可能是一个脏的实现: import requests from

我想对requests.geturl使用容错,最多重试3次

目前,我创建了一个新会话,并在方法之间传递该会话,我希望避免:

with requests.Session() as rs:
     rs.mount('https://', HTTPAdapter(max_retries=3))
     rs.get(url)
     ...

有没有办法配置requests.geturl调用,以便在服务器失败时重试对服务器的请求?

这可能是一个脏的实现:

import requests
from time import sleep
While True:
    try:
        #requests here
        break
    except:
        sleep(1)
但将重试设置为3:

import requests
from time import sleep
for i in range(3):
    try:
        #requests here
        break
    except:
        sleep(1)
良好做法:

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


def requests_retry_session(
    retries=3,
    backoff_factor=0.3,
    status_forcelist=(500, 502, 504),
    session=None,
):
    session = session or requests.Session()
    retry = Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        status_forcelist=status_forcelist,
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    return session
response = requests_retry_session().get('https://www.example.com/')
print(response.status_code)

s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})

response = requests_retry_session(session=s).get(
    'https://www.example.com'
)
每次重试都将创建一个新的重试对象,该对象具有更新的值,因此可以安全地重用这些值。 文件是。 请注意: 修补HTTPAdapter.init默认值对您的帮助很大 推荐的

您可以使用一个为functools.partialmethod的max_retries参数设置默认值的参数来覆盖HTTPAdapter.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

from functools import partialmethod
requests.adapters.HTTPAdapter.__init__ = partialmethod(
    requests.adapters.HTTPAdapter.__init__, max_retries=3)
...
requests.get(url)

循环直到它是真的?你说的真是什么意思?您指的是HTTP状态吗?虽然为True:try:requests.get break expect:pass,但我的回答对您有帮助吗?是的,谢谢,尽管我希望通过参数来支持本机请求。requests.adapters.DEFAULT\u RETRIES=5将不起作用,因为在执行语句时,requests.adapters.HTTPAdapter.\uuuuu init\uuuuuuuu已定义为最大重试次数的默认值0。这根本无法回答问题,因为OP特别希望避免创建新会话并传递它。实例化requests.adapters.HTTPAdaptermax\u retries=3有什么帮助?它将在调用后立即丢弃,不会在其他任何地方使用。您的注释仅适用于requests.adapters.DEFAULT_RETRIES=3,而不适用于requests.adapters.HTTPAdaptermax_RETRIES=3。requests.adapters.HTTPAdaptermax_retries=3所做的只是实例化一个新对象并将其丢弃。此外,requests.adapters.DEFAULT_retries=3对于monkey修补毫无意义。使用monkey补丁,您不需要requests.adapters.DEFAULT\u重试的值。