Je voulais un délai d'expiration par défaut facilement ajouté à un tas de code (en supposant que le délai d'expiration résout votre problème)
C'est la solution que j'ai choisie à partir d'un ticket soumis au référentiel pour les demandes.
crédit: https://github.com/kennethreitz/requests/issues/2011#issuecomment-477784399
La solution est les deux dernières lignes ici, mais je montre plus de code pour un meilleur contexte. J'aime utiliser une session pour le comportement de nouvelle tentative.
import requests
import functools
from requests.adapters import HTTPAdapter,Retry
def requests_retry_session(
retries=10,
backoff_factor=2,
status_forcelist=(500, 502, 503, 504),
session=None,
) -> requests.Session:
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)
# set default timeout
for method in ('get', 'options', 'head', 'post', 'put', 'patch', 'delete'):
setattr(session, method, functools.partial(getattr(session, method), timeout=30))
return session
alors vous pouvez faire quelque chose comme ceci:
requests_session = requests_retry_session()
r = requests_session.get(url=url,...