【问题标题】:python requests on Google App Engine not working for HTTPSGoogle App Engine 上的 python 请求不适用于 HTTPS
【发布时间】:2014-03-03 12:59:41
【问题描述】:

我在 Google App Engine 上使用 python-request,但它在 HTTPS 上没有按预期工作。我们来看一个例子:

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

如果我在终端中执行该行,它会完美运行。响应为 200 OK(无重定向)。

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

因此,python-requests 似乎不适用于 HTTPS 的 GAE(我已经使用多个 URL 进行了测试)。但是 HTTP 完美运行。

知道发生了什么吗?

提前致谢。

【问题讨论】:

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


【解决方案1】:

降级到 requests==2.1.0 对我有用。

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

希望 App Engine 尽快解决此问题,请求 won't

编辑:

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

【讨论】:

  • 如何降级到较早版本的请求?
  • 到目前为止,这似乎是让它工作的唯一方法......所以当我们等待 GAE 中的修复时,这是一个非常有效的响应。谢谢鼠尾草!干得好!
  • 嗨@rattay。问题似乎只是连接到 Google IP 地址(例如 Google oAuth),因为它们被套接字 API 阻止,如下所示:cloud.google.com/appengine/docs/python/sockets 在这种情况下,您的补丁似乎不再起作用。在最新版本的请求(2.8.1)中,评论我们的 session.SessionRedirectMixin.rebuild_auth 并不能解决错误:无法建立新连接:[Errno 13] Permission denied
  • @jacob 你尝试降级到 requests==2.1.0 吗?
  • 在此确认 2.1.0 和 2.3.0 可以在最新的gcloud 104 -- app-engine-python 1.9.35上工作
【解决方案2】:

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

首先install requests-toolbelt:

pip install -t lib requests-toolbelt

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

import requests_toolbelt.adapters.appengine

requests_toolbelt.adapters.appengine.monkeypatch()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多