J'utilise la bibliothèque Python requests pour mettre en œuvre la logique de relance. Voici un simple script que j'ai réalisé pour reproduire le problème que je rencontre. Dans le cas où nous sommes à court de tentatives, j'aimerais pouvoir enregistrer au moins une des réponses du serveur pour faciliter le débogage. Cependant, je ne vois pas très bien comment accéder à cette information. Bien sûr, je pourrais implémenter les tentatives d'une autre manière pour atteindre mon objectif, mais il me semble que ce n'est pas un cas limite et je serais surpris de découvrir que les demandes ne prennent pas en charge mon cas d'utilisation.
J'ai examiné requests.exceptions.RetryError, requests.packages.urllib3.exceptions.MaxRetryError qu'il englobe, et requests.packages.urllib3.exceptions.ResponseError qu'il englobe, en vain.
Est-ce que j'ai manqué quelque chose ?
#!/usr/bin/env python
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from requests.exceptions import RetryError
def main():
retry_policy = Retry(
total=3,
status_forcelist=[418])
session = requests.Session()
session.mount('http://', HTTPAdapter(max_retries=retry_policy))
try:
session.get('http://httpbin.org/status/418')
except RetryError as retry_error:
print retry_error
print retry_error.response is None
if __name__ == '__main__':
main()
$ python test.py
HTTPConnectionPool(host='httpbin.org', port=80): Max retries exceeded with url: /status/418 (Caused by ResponseError('too many 418 error responses',))
True