Я использую библиотеку запросов Python для реализации логики повтора. Вот простой script, который я сделал, чтобы воспроизвести проблему, которая у меня есть. В случае, когда у нас заканчиваются попытки, я хотел бы иметь возможность регистрировать хотя бы один из ответов сервера, чтобы помочь отлаживать. Однако мне не ясно, как получить доступ к этой информации. Конечно, я мог бы повторить попытку каким-то другим способом для достижения моей цели, но казалось, что это не так уж и много, и я был бы удивлен, узнав, что запросы не поддерживают мой прецедент.
Я просмотрел request.exceptions.RetryError, request.packages.urllib3.exceptions.MaxRetryError, который он обертывает, и request.packages.urllib3.exceptions.ResponseError, который обертывает все безрезультатно.
Я что-то пропустил?
#!/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