如何使用Python从https链接获取JSON?

时间:2012-11-13 04:54:04

标签: python json ssl https urllib2

我正在学习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:   未经授权的

非常感谢提前。

2 个答案:

答案 0 :(得分: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 )

答案 1 :(得分:1)

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