我正在尝试使用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
答案 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测试)
所以,总结一下:
安装上面提到的urllib3
和其他SSL软件包,然后尝试再次运行您正在执行的请求,看看是否有任何更改。我的猜测是,这将(至少)帮助mailchimp
,因为它也在抱怨SSL / HTTPS问题。
如果这不起作用,请尝试使用urllib3
api代替requests
执行相同的任务,看看是否有效。如果是这样,问题特别在于urllib3
正在使用的打包requests
,这可能需要进行一些修补。
import urllib3
http = urllib3.PoolManager()
r = http.request('GET', 'https://www.23andme.com/')
对不起,这不是一个明确的解决方案,希望我的一个建议会有所帮助。更新我的进展情况,我会尝试尽可能多地提供帮助
答案 1 :(得分:2)