Google App Engine上的python请求不适用于HTTPS

时间:2014-02-06 14:15:10

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

我在Google App Engine上使用了python-request,但它无法正常使用HTTPS。我们来看一个例子:

import requests
requests.get('https://www.digitalocean.com')

如果我在终端中执行它,该行可以正常工作。响应是200 OK(没有重定向)。

但是,如果我在GAE上执行它,则会引发TooManyRedirects错误。 试图找出我用allow_redirects = False执行的问题是什么,我可以看到响应是一个重定向(301),它指向同一个url! ('location'标头值为' https://www.digitalocean.com ')。这显然(当allow_redirect = True时)反复发生,直到引发TooManyRedirects错误。

所以似乎python-requests不能用于GAE for HTTPS(我用几个URL测试过)。但HTTP工作得很好。

有关正在发生的事情的任何想法?

提前致谢。

2 个答案:

答案 0 :(得分:17)

降级到请求== 2.1.0对我有用。

拥有最新的urllib3对于解决不相关的错误非常重要(import pwd,我记得)。

希望App Engine尽快修复此问题,作为请求won't

编辑:

我认为您也可以通过评论lines 161-175 in sessions.py在最新请求中修补此问题。未经测试。

答案 1 :(得分:4)

现在有一种比改变requests版本更好的解决方案。正如official docs中所建议的那样,您可以使用requests进行补丁,以便与Google App Engine很好地配合使用。

首先install次请求 - 工具带:

pip install -t lib requests-toolbelt

然后在您的main.py文件(或同等文件)中:

import requests_toolbelt.adapters.appengine

requests_toolbelt.adapters.appengine.monkeypatch()