Запросы 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()