【问题标题】:How can I go about getting the JSON from a https link using Python?如何使用 Python 从 https 链接获取 JSON?
【发布时间】:2012-11-01 14:07:56
【问题描述】:

我正在学习 Python,我想开始使用 Twitter 的流式处理 API。我知道如何构建一个非常基本的应用程序,该应用程序使用urllib2 读取页面内容,并且过去曾成功完成此操作。但是,此特定 Twitter 流 API 所需的安全连接 https:// 似乎不适用于 urllib2。

我尝试从以下链接获取 JSON:https://stream.twitter.com/1.1/statuses/filter.json?locations=-122.75,36.8,-121.75,37.8

通过编写以下内容:

import urllib2
url = "https://stream.twitter.com/1.1/statuses/filter.json?locations=-122.75,36.8,-121.75,37.8"
print urllib2.urlopen(url).read()

但是,回溯显示我没有被授权;我推测这是因为 HTTPS SSL 连接,研究支持了这一点。所以我想我的问题是从需要这种 SSL 连接的链接获取 JSON 的最佳方法是什么?我也尝试了 curl,但再次收到错误 401。

以下是完整的回溯。

Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 第 126 行,在 urlopen 文件中 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 第 400 行,在打开的文件中 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 第 513 行,在 http_response 文件中 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 第 438 行,在错误文件中 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 第 372 行,在 _call_chain 文件中 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 第 521 行,在 http_error_default urllib2.HTTPError:HTTP 错误 401: 未经授权

提前非常感谢。

【问题讨论】:

  • API 可能需要 OAuth 令牌或其他 API 密钥。
  • 啊。它确实说它需要 Twitter 用户登录。我想这就是为什么当我在浏览器中输入 url 时流工作的原因(因为我登录到 Twitter)。它不需要 OAuth,所以我可以将我的登录凭据添加到我的 Python 文件的标题中吗?

标签: python json ssl https urllib2


【解决方案1】:

这不是 SSL 连接未授权,而是您在进行此调用之前尚未明确授权系统。在发出请求之前,您需要对服务器执行某种授权。

【讨论】:

    【解决方案2】:

    正如其他人提到的,您需要授权。操作方法如下:

    Twitter API with urllib2 in python

    import urllib2
    import base64
    
    request = urllib2.Request( 'https://stream.twitter.com...' )
    request.add_header( 'Authorization', 'Basic ' + base64.b64encode( username + ':' + password ) )
    response = urllib2.urlopen( request )
    

    【讨论】:

    • 谢谢!我刚刚尝试了您链接到的问题的答案,它似乎有效(终端似乎正在处理,虽然我不知道这需要多长时间 - 阅读时打印响应)
    • 这种方法的问题在于它可以工作,但并不安全,因为urllib2 不会对证书或主机名进行任何验证。
    • @Bruno ...我想如果你偏执地认为有人冒充 twitter 或嗅探你对 twitter api 的请求,这是不安全的。 thejosephturner.com/blog/2011/03/19/… 有一个解决方法
    • 如果有中间人是不安全的,这是 HTTPS 旨在防止的事情之一(除了被动窃听)。
    • @布鲁诺。对,这就是我所说的(“有人冒充推特或嗅探你的请求”)。无论如何,如果你想要 https,请点击链接。
    猜你喜欢
    • 2013-05-17
    • 2011-03-05
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    相关资源
    最近更新 更多