python请求不能与google app engin一起使用

2024-06-26 15:02:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python请求获取一个页面,代码在views.py

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

我得到错误Exceeded 30 redirects.我的应用程序是一个谷歌应用程序引擎Django应用程序。我已经让这些代码在python控制台和django服务器上工作pythonanwhere.com但由于某些原因,它不能在谷歌应用引擎上运行。是什么引起的?谢谢

编辑:我的应用程序中的请求模块似乎有另一个问题。我有一个代码可以在mailchimp列表中添加电子邮件:

^{pr2}$

但是如果失败并出现错误HTTPS/SSL is required


Tags: 代码pyhttps引擎com应用程序getsession
2条回答

根据this讨论,问题出在googleappengine上的netrc。我可以通过使用旧版本的请求来解决这个问题(在我的例子中是1.2.3,但是其他版本也可以)

编辑:根据this的答案,请求2.1.0也应该起作用。在

尝试安装urllib3(以及其他内容,请参见下文)。在

从历史上看,googleappengine的请求有很多问题(参见问题#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 with SNI-support for Python 2.

This needs the following packages installed:

  • pyOpenSSL (tested with 0.13)
  • ndg-httpsclient (tested with 0.3.2)
  • pyasn1 (tested with 0.1.6)

所以,总结一下:

  1. 安装urllib3和上面提到的其他SSL包,然后再次尝试运行您正在执行的请求,看看是否有任何更改。我的猜测是这将(至少)帮助解决mailchimp,因为它也在抱怨SSL/HTTPS问题。

  2. 如果这不起作用,试着用urllib3api代替requests来完成同样的任务,看看是否有效。如果是这样的话,问题是requests正在使用的打包的urllib3,这可能需要一些修补。在

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

抱歉,这不是一个明确的解决办法,希望我的一个建议会有帮助。告诉我最新进展,我会尽力帮助你

相关问题 更多 >