max retries exceeded with url

Я пытаюсь получить содержимое App Store> Business:

Когда я пытаюсь range с (0,2) , он работает, но когда я помещаю range в 100 , он показывает эту ошибку:

Что произошло, так это то, что сервер itunes отказывается от вашего соединения (вы отправляете слишком много запросов с одного и того же IP-адреса за короткий промежуток времени)

Максимальное количество попыток превышено с помощью url:/in/app/adobe-reader/ >

Ошибка трассировки вводит в заблуждение, она должна быть чем-то вроде «Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от него» .

Существует проблема с python.requests lib в Github, проверьте здесь

Чтобы преодолеть эту проблему (не столько проблема, как обманчивая трассировка отладки), вы должны поймать связанные с подключением исключения следующим образом:

Еще один способ преодолеть эту проблему — использовать достаточный промежуток времени для отправки запросов на сервер. Это может быть достигнуто с помощью функции sleep(timeinsec) в python (не забудьте импортировать сон)

Все запросы — это потрясающая папка python, надеюсь, что решает вашу проблему.

модуль запросов Python прост и элегантен, но меня беспокоит одна вещь. Можно получить запросы.исключение.ConnectionError сообщение типа:

это означает, что запросы могут пытаться получить доступ к данным несколько раз. Но в документах нет ни единого упоминания об этой возможности. Глядя на исходный код, я не нашел места, где я мог бы изменить значение по умолчанию (предположительно 0).

Так можно ли как-то установить максимальное количество попыток для запросов?

6 ответов

это базовый urllib3 библиотека, которая выполняет повторную попытку. Чтобы задать другое максимальное число повторов, используйте альтернативные транспортные адаптеры:

на max_retries аргумент принимает целое число или Retry() объект; последний дает вам мелкозернистый контроль над тем, какие виды сбоев повторяются (целочисленное значение превращается в Retry() экземпляр, который обрабатывает только сбои соединения; ошибки после подключения по умолчанию не обрабатывается, поскольку это может привести к побочным эффектам).

Читайте также:  http rghost ru 45013837

старый ответ, предшествующий выпуску запросов 1.2.1:

на requests библиотека на самом деле не делает это настраиваемым, и не собирается (см. этот запрос тянуть). В настоящее время (запросы 1.1) количество попыток равно 0. Если вы действительно хотите установить его на более высокое значение, вам придется установить это глобально:

эта константа не документирована; используйте это на свой страх и риск, поскольку будущие выпуски могут изменить то, как это обрабатывается.

обновление: и это сделал изменить; в версии 1.2.1 настройка max_retries параметр на HTTPAdapter() класс был добавлен, так что теперь вам нужно использовать альтернативные транспортные адаптеры, см. выше. Подход monkey-patch больше не работает, если вы также не исправите HTTPAdapter.__init__() настройки по умолчанию (очень не рекомендуется).

это не только изменит max_retries, но и включит стратегию возврата, которая делает запросы ко всем http:// адреса сна в течение определенного периода времени перед повторной попыткой (в общей сложности 5 раз):

по состоянию на документация для повтора: если backoff_factor равен 0.1, то sleep () будет спать в течение [0.1 s, 0.2 s, 0.4 s, . ] между попытками. Он также заставит повторить попытку, если возвращенный код состояния 500, 502, 503 или 504.

различные другие опции для повторной попытки позволяют более детализированный контроль:

  • total-общее количество попыток разрешить.
  • connect — сколько ошибок, связанных с подключением, чтобы повторить попытку.
  • read — сколько раз повторить попытку при ошибках чтения.
  • redirect — сколько перенаправлений выполнять.
  • method_whitelist-набор прописных глаголов метода HTTP, которые мы должны повторить.
  • status_forcelist-набор кодов состояния HTTP, которые мы должен заставить повторить попытку.
  • backoff_factor — коэффициент возврата для применения между попытками.
  • raise_on_redirect-если количество переадресаций исчерпано, вызвать MaxRetryError или вернуть ответ с кодом ответа в диапазоне 3xx.
  • raise_on_status-аналогичное значение raise_on_redirect: должны ли мы вызывать исключение или возвращать ответ, если статус падает в диапазоне status_forcelist и повторные попытки были измученный.
Читайте также:  1с формат даты дата

NB: raise_on_status является относительно новым и еще не превратился в выпуск urllib3 или запросов. на raise_on_status аргумент ключевого слова, похоже, попал в стандартную библиотеку не более чем в python версии 3.6

для повторения запросов по определенным кодам состояния HTTP используйте status_forcelist. Например, status_forcelist=[503] повторит попытку для кода состояния 503 (service недоступный.)

по умолчанию повторная попытка срабатывает только для этих условий:

  • не удалось получить подключение из пула.
  • TimeoutError
  • HTTPException поднято (из http.клиент в Python 3 else httplib). Это кажется низкоуровневыми исключениями HTTP, такими как URL или протокол not сформировано правильно.
  • SocketError
  • ошибка протокола

обратите внимание, что все эти исключения предотвращают регулярный HTTP-ответ от получения. Если любой генерируется регулярный ответ, повторная попытка не выполняется. Без использования status_forcelist даже ответ со статусом 500 не будет повторен.

чтобы заставить его вести себя более интуитивно понятным для работы с удаленным API или веб-сервером, я бы использовал приведенный выше фрагмент кода, который заставляет повторять попытки на статусах 500, 502, 503 и 504, все из которых не редкость в интернете и (возможно) восстанавливаются с учетом большого достаточно периода отступления.

HTTPConnectionPool(host=’127.0.0.1′, port=48457): Max retries exceeded with url: /session/76af77e47285142cc188ed81e217fbb4/source (Caused by NewConnectionError(‘: Failed to establish a new connection: [Errno 111] Connection refused’))
2019-06-14 17:44:04.270078
Traceback (most recent call last):
File «/root/.local/lib/python3.7/site-packages/urllib3/connection.py», line 159, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File «/root/.local/lib/python3.7/site-packages/urllib3/util/connection.py», line 80, in create_connection
raise err
File «/root/.local/lib/python3.7/site-packages/urllib3/util/connection.py», line 70, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File «/root/.local/lib/python3.7/site-packages/urllib3/connectionpool.py», line 600, in urlopen
chunked=chunked)
File «/root/.local/lib/python3.7/site-packages/urllib3/connectionpool.py», line 354, in _make_request
conn.request(method, url, **httplib_request_kw)
File «/usr/local/lib/python3.7/http/client.py», line 1229, in request
self._send_request(method, url, body, headers, encode_chunked)
File «/root/.local/lib/python3.7/site-packages/selenium/webdriver/remote/remote_connection.py», line 374, in execute
return self._request(command_info[0], url, body=data)
File «/root/.local/lib/python3.7/site-packages/selenium/webdriver/remote/remote_connection.py», line 397, in _request
resp = self._conn.request(method, url, body=body, headers=headers)
File «/root/.local/lib/python3.7/site-packages/urllib3/request.py», line 68, in request
**urlopen_kw)
File «/root/.local/lib/python3.7/site-packages/urllib3/request.py», line 89, in request_encode_url
return self.urlopen(method, url, **extra_kw)
File «/root/.local/lib/python3.7/site-packages/urllib3/poolmanager.py», line 323, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File «/root/.local/lib/python3.7/site-packages/urllib3/connectionpool.py», line 667, in urlopen
**response_kw)
File «/root/.local/lib/python3.7/site-packages/urllib3/connectionpool.py», line 667, in urlopen
**response_kw)
File «/root/.local/lib/python3.7/site-packages/urllib3/connectionpool.py», line 667, in urlopen
**response_kw)
File «/root/.local/lib/python3.7/site-packages/urllib3/connectionpool.py», line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File «/root/.local/lib/python3.7/site-packages/urllib3/util/retry.py», line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=’127.0.0.1′, port=48457): Max retries exceeded with url: /session/76af77e47285142cc188ed81e217fbb4/window (Caused by NewConnectionError(‘: Failed to establish a new connection: [Errno 111] Connection refused’))

Читайте также:  admp act set on off 10nm

urllib3==1.24.1
selenium==3.141.0
Читал что это должны были пофиксить как раз в версии 3.141 , но самое забавное что на этом же сервере буквально месяц назад скрипт работал в течении 40 дней без перерыва и вполне исправно. Подскажите что попробовать?

p.s делал и слипы, и даже перезагрузку в случае исключения, но это увы не помогает даже при перегрузки вебдрайвера с выгрузкой из памяти. Подумал даже может провайдер может что-то ограничивает?

Оцените статью
Добавить комментарий

Adblock detector