【问题标题】:python requests not working with google app enginepython请求不适用于谷歌应用引擎
【发布时间】:2014-03-01 03:50:21
【问题描述】:

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

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

我收到错误 Exceeded 30 redirects. 我的应用是 Google App Engine Django 应用。我已经让这段代码在 python 控制台和 pythonanywhere.com 上的 django 服务器中工作,但由于某种原因,它不能在谷歌应用程序引擎上工作。这可能是什么原因造成的?谢谢

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

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

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

【问题讨论】:

  • requests 会话也保存了 cookie,该站点出于不同的原因重定向您。
  • 会不会是用户代理?如何让请求模拟浏览器?
  • 通常是一个或多个标题,是的。添加一个headers=.. 字典并开始复制浏览器发送的标头,看看是什么使它起作用。
  • 我发现它在 python 控制台中有效,但在 django 的 views.py 中无效
  • 此代码适用于我:def index(request): import requests s = requests.Session() r = s.get("https://www.23andme.com/") return HttpResponse(r.text) 当我访问该函数(Django 1.6.0、python 2.7.3、本地服务器)时,会呈现 www.23andme.com 的页面。跨度>

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


【解决方案1】:

根据this 的讨论,问题出在 Google App Engine 上的 netrc 上。我能够通过使用旧版本的 Requests 来解决这个问题(在我的情况下是1.2.3,但其他人也可以工作。)

编辑:根据this 的回答,Requests 2.1.0 应该也可以工作。

【讨论】:

【解决方案2】:

尝试安装urllib3(和其他东西,见下文)。

请参阅,从历史上看,谷歌应用引擎的请求存在大量问题(请参阅问题 #498)。这些问题大多通过v1.3 附带的对 GAE 的 urllib3 支持得到解决。它是很久以前出现的(当前版本是 1.7),所以它可能不是问题,但是当您最初安装请求时,它在一个名为 packages 的文件夹中包含 urllib3 并且可能不包括全部。

我还尝试搜索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 脚本,它需要:

支持 Python 2 的 SNI 的 SSL。

这需要安装以下软件包:

  • pyOpenSSL(用 0.13 测试)
  • ndg-httpsclient(用 0.3.2 测试)
  • pyasn1(用 0.1.6 测试)

所以,总结一下:

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

  2. 如果这不起作用,请尝试使用 urllib3 api 而不是 requests 来执行相同的任务,看看是否有效。如果是这样,问题出在requests 正在使用的打包urllib3 上,可能需要一些补丁。

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

抱歉,这不是一个明确的解决方案,希望我的一个建议会有所帮助。更新我的进度,我会尽力提供帮助

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 2014-05-25
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多