3 votes

Comment accéder à la réponse du serveur lorsque la bibliothèque de requêtes Python atteint la limite de réessai ?

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X