python请求不使用谷歌应用程序引擎

时间:2014-02-04 22:33:57

标签: python django google-app-engine python-requests

我正在尝试使用views.py中的此代码使用python请求获取页面:

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

我收到错误Exceeded 30 redirects.我的应用是Google App Engine Django应用。我已经将此代码用于python控制台和pythonanywhere.com上的django服务器,但由于某种原因它不适用于谷歌应用引擎。可能是什么导致了这个?感谢

编辑:我的应用程序中的Requests模块似乎还有另一个问题。我有这个代码将电子邮件添加到mailchimp列表:

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

但如果失败并显示错误HTTPS/SSL is required

2 个答案:

答案 0 :(得分:5)

尝试安装urllib3(和其他内容,见下文)。

请参阅,历史上,使用Google应用引擎的请求存在大量问题(请参阅问题#498)。这些主要是通过对v1.3附带的GAE的urllib3支持解决的。很久以前就出来了(当前版本是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,支持Python 2的SNI。

     

这需要安装以下软件包:

     
      
  • 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/')
    
  3. 对不起,这不是一个明确的解决方案,希望我的一个建议会有所帮助。更新我的进展情况,我会尝试尽可能多地提供帮助

答案 1 :(得分:2)

根据this讨论,问题在于Google App Engine上的netrc。我能够通过使用旧版本的请求(1.2.3来处理问题,但其他人也可以使用。)

编辑:根据this回答,请求2.1.0也应该有效。