Чистая настройка max_retries на запросы Python получает или отправляет метод

Связано с вопросом старой версии запросов: Могу ли я установить max_retries для request.request?

Я не видел примера для чистого включения max_retries в вызове requests.get() или requests.post().

Любил бы

requests.get(url, max_retries=num_max_retries))

реализация

Ответ 1

Быстрый поиск python-docs будет показать, как именно для установки max_retries при использовании Session.

Чтобы извлечь код непосредственно из документации:

import requests
s = requests.Session()
a = requests.adapters.HTTPAdapter(max_retries=3)
b = requests.adapters.HTTPAdapter(max_retries=3)
s.mount('http://', a)
s.mount('https://', b)
s.get(url)

То, что вы ищете, не настраивается по нескольким причинам:

  • Запросы больше не предоставляют средства для настройки

  • Количество попыток зависит от используемого адаптера, а не от сеанса или конкретного запроса.

  • Если одному запросу требуется одно конкретное максимальное количество запросов, этого должно быть достаточно для другого запроса.

Это изменение было введено в запросах 1.0 более года назад. Мы сохранили это для 2.0 целенаправленно, потому что это имеет наибольший смысл. Мы также не будем вводить параметр для настройки максимального количества попыток или чего-либо еще, в случае, если вы подумывали спросить.


Изменить. Используя аналогичный метод, вы можете добиться гораздо более тонкого контроля за работой повторителей. Вы можете прочитать этот, чтобы получить хорошее представление об этом. Короче говоря, вам нужно будет импортировать класс Retry из urllib3 (см. Ниже) и сообщить ему, как вести себя. Мы передаем это на urllib3, и у вас будет лучший набор параметров для обработки попыток.

from requests.packages.urllib3 import Retry
import requests

# Create a session
s = requests.Session()

# Define your retries for http and https urls
http_retries = Retry(...)
https_retries = Retry(...)

# Create adapters with the retry logic for each
http = requests.adapters.HTTPAdapter(max_retries=http_retries)
https = requests.adapters.HTTPAdapter(max_retries=https_retries)

# Replace the session original adapters
s.mount('http://', http)
s.mount('https://', https)

# Start using the session
s.get(url)