2014-02-04 4 views
6

Я пытаюсь принести страницу с помощью запросов питона с этим кодом в views.py:запросы питон не работает с Google App Engine

s = requests.Session() 
r = s.get("https://www.23andme.com/") 

Я получаю ошибку Exceeded 30 redirects. Мое приложение является приложением Google App Engine Django. Я получил этот код для работы на консоли python и на сервере django на pythonanywhere.com, но по какой-то причине он не работает на движке Google. Что может быть причиной этого? Спасибо

Редактировать: похоже, есть еще одна проблема с модулем Requests в моем приложении. У меня есть этот код, чтобы добавить письмо в Mailchimp списке:

m = mailchimp.Mailchimp(MAILCHIMP_API_KEY) 
list_response = m.lists.list() 

но если завершается с ошибкой HTTPS/SSL is required

+0

Сессия «запросы» также сохраняет файлы cookie, сайт перенаправляет вас по другой причине. –

+0

Это может быть пользовательский агент? Как заставить запросы имитировать браузер? – connor

+0

Обычно это один или несколько заголовков, да. Добавьте словарь 'headers = ..' и начните копирование заголовков, отправляемых вашим браузером, посмотрите, что заставляет его работать. –

ответ

2

Согласно обсуждению this, проблема связана с netrc в Google App Engine. Мне удалось решить проблему, используя более старую версию запросов (1.2.3 в моем случае, но другие могут работать тоже.)

Редактировать: В соответствии с ответом this, запросы 2.1.0 также должны работать.

+2

см. [this] (http://stackoverflow.com/questions/21605328/python-requests -on-google-app-engine-not-working-for-https? rq = 1), а также – yuvi

5

Попробуйте установить urllib3 (и другие вещи, см. Ниже)

См., Исторически было множество проблем для запросов с движком Google (см. Вопрос #498). В основном они были решены с поддержкой urllib3 для GAE, которая поставлялась с v1.3. Он вышел давным-давно (текущая версия - 1.7), поэтому, вероятно, это не проблема, однако при первоначальной установке запросов она включает urllib3 в папку с именем packages и, возможно, она не включает ее полностью.

Я также попытался найти исходный код для 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)
  • нсг-httpsclient (протестировано с 0.3.2)
  • pyasn1 (проверено 0.1.6)

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

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

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

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

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

Смежные вопросы