запросы python не работают с Google app engine
Я пытаюсь получить страницу, используя запросы python с этим кодом в views.py
:
s = requests.Session()
r = s.get("https://www.23andme.com/")
я получаю ошибку Exceeded 30 redirects.
мое приложение является приложением Google App Engine Django. Я получил этот код для работы в консоли python и сервере django на pythonanywhere.com, но по какой-то причине он не работает на Google app engine. Что могло быть причиной этого? Спасибо
Edit: похоже, есть еще одна проблема с модулем запросов в моем приложении. У меня есть этот код, чтобы добавить электронная почта к списку mailchimp:
m = mailchimp.Mailchimp(MAILCHIMP_API_KEY)
list_response = m.lists.list()
но если не удается с ошибкой HTTPS/SSL is required
2 ответов
попробуйте установить urllib3 (и другие вещи, см. ниже).
см., исторически были тонны проблем для запросов с Google app engine (и см. выпуск #498). Они были в основном решены с поддержкой urllib3 для GAE, которые пришли с В1.3. Он вышел давно (текущая версия 1.7), поэтому, вероятно, это не проблема, однако при первоначальной установке запросов он включает в себя urllib3
в папке packages
и может быть, он не включает entirey его.
Я также попытался найти исходный код для requests
и нашел это интересным:
# Attempt to enable urllib3's SNI support, if possible
try:
from requests.packages.urllib3.contrib import pyopenssl
pyopenssl.inject_into_urllib3()
except ImportError:
pass
углубляясь,contrib
пакет включает в себя pyopenssl.py
скрипт, который требует:
SSL с поддержкой SNI для Python 2.
для этого необходимо установить следующие пакеты:
- pyOpenSSL (протестировано с 0.13)
- ndg-httpsclient (протестировано с 0.3.2)
- pyasn1 (протестировано с 0.1.6)
Итак, подведем итоги:
установить
urllib3
и другие пакеты SSL, упомянутые выше, затем попробуйте запустить этот запрос, который вы делаете снова, и посмотрите, изменилось ли что-нибудь. Я предполагаю ,что это (по крайней мере) поможет сmailchimp
поскольку он также жалуется на проблемы SSL/HTTPS.-
если это не работает, попробуйте использовать
urllib3
api вместоrequests
выполнить ту же задачу и посмотреть, работает ли это. Если это так, проблема конкретно с упакованнымurllib3
этоrequests
используется, что может потребовать исправления.import urllib3 http = urllib3.PoolManager() r = http.request('GET', 'https://www.23andme.com/')
извините, это не определенное решение, надеюсь, одно из моих предложений поможет. Обновите меня о прогрессе, я постараюсь помочь столько, сколько смогу