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

Итак, подведем итоги:

  1. установить urllib3 и другие пакеты SSL, упомянутые выше, затем попробуйте запустить этот запрос, который вы делаете снова, и посмотрите, изменилось ли что-нибудь. Я предполагаю ,что это (по крайней мере) поможет с mailchimp поскольку он также жалуется на проблемы SSL/HTTPS.

  2. если это не работает, попробуйте использовать urllib3 api вместо requests выполнить ту же задачу и посмотреть, работает ли это. Если это так, проблема конкретно с упакованным urllib3 это requests используется, что может потребовать исправления.

    import urllib3
    http = urllib3.PoolManager()
    r = http.request('GET', 'https://www.23andme.com/')
    

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


по данным этой обсуждение, проблема с netrc на Google App Engine. Я смог обойти проблему, используя более старую версию запросов (1.2.3 в моем случае, но другие могут тоже работать.)

Edit: согласно этой ответ, запросы 2.1.0 также должны работать.