#python #python-3.x #session #python-requests #urllib
#питон #python-3.x #сессия #python-запросы #urllib
Вопрос:
import requests from requests.adapters import HTTPAdapter from urllib3 import Retry DEFAULT_RETRIES = 5 DEFAULT_BACKOFF = 0.3 def session_with_retries(max_retries: int = DEFAULT_RETRIES, backoff_factor: float = DEFAULT_BACKOFF, proxies: dict = None) -gt; requests.Session: new_session = requests.Session() retries = Retry(total=max_retries, connect=max_retries, read=max_retries, status=max_retries, allowed_methods=frozenset(['HEAD', 'GET', 'POST']), status_forcelist=frozenset([500, 502, 503, 504]), backoff_factor=backoff_factor, ) retry_adapter = HTTPAdapter(max_retries=retries) new_session.mount('http://', retry_adapter) new_session.mount('https://', retry_adapter) if proxies is not None: new_session.proxies.update(proxies) return new_session
Этот код предназначен для логики повторных попыток с запросами python. И тоже отлично работает. Как и ожидалось, после этого он создаст исключение для 503
кода состояния max_retries
. Так что в совокупности это вызовет исключение для [500, 502, 503, 504]
.
Как я могу получить код состояния, для которого было создано исключение из этого метода. В качестве сообщений об исключениях я мог видеть что-то
HTTPSConnectionPool(host='some-host', port=443): Max retries exceeded with url: /services/data/v52.0/connect/communities?pageSize=100 (Caused by ResponseError('too many 503 error responses',))
Я отследил исключения urllib3.exceptions.MaxRetryError
, requests.exceptions.RetryError
но не смог найти код статуса для исключения.
Строго НЕТ для других библиотек, таких как tenacity