Запросы python в Google App Engine не работают для HTTPS
Я использую python-запрос в Google App Engine, и он не работает как ожидалось для HTTPS. Рассмотрим пример:
import requests
requests.get('https://www.digitalocean.com')
Эта строка отлично работает, если я выполняю ее в терминале. Ответ 200 OK (без переадресаций).
Однако, если я выполняю его в GAE, возникает ошибка TooManyRedirects.
Попытка выяснить, что проблема, которую я выполняю с allow_redirects = False, и я вижу, что ответ - это перенаправление (301), которое указывает на тот же url!!! (значение 'location' - 'https://www.digitalocean.com'). Это очевидно (когда allow_redirect = True) происходит снова и снова до тех пор, пока не будет поднята ошибка TooManyRedirects.
Итак, кажется, что python-запросы не работают с GAE для HTTPS (я тестировал несколько URL-адресов). Однако HTTP работает отлично.
Любая идея о том, что происходит?
Спасибо заранее.
Ответы
Ответ 1
Переход на запросы == 2.1.0 работал у меня.
Наличие актуального urllib3 важно для устранения несвязанной ошибки (import pwd
, как я помню).
Скорее всего, App Engine исправляет это в ближайшее время, так как запросы не будут.
EDIT:
Я думаю, вы также можете исправить это в последних запросах, комментируя строки 161-175 в session.py. Непроверенные.
Ответ 2
Теперь есть лучшее решение, чем изменение версии requests
. Как предложено в официальных документах , вы можете использовать патч обезьяны requests
, чтобы хорошо играть с Google App Engine.
Сначала install request-toolbelt:
pip install -t lib requests-toolbelt
Затем в вашем файле main.py
(или эквиваленте):
import requests_toolbelt.adapters.appengine
requests_toolbelt.adapters.appengine.monkeypatch()