Python - 捕获请求

时间:2016-08-12 22:35:28

标签: python

我是Python新手。我正在尝试捕获从请求结果返回的各个值。

以下是发送请求的代码的一部分:

opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request(url, data=json_payload)
auth = base64.encodestring('%s:%s' % (user, pwd)).replace('\n', '')
request.add_header('Authorization', 'Basic %s' % auth)
request.add_header('Content-Type', 'application/json')
request.add_header('Accept', 'application/json')
request.get_method = lambda: 'POST'
# Perform the request
result = opener.open(request).read()
print result

打印结果给出了下面的输出(凌乱的格式化)

{"@odata.context":"https://outlook.office365.com/api/v1.0/$metadata#Me/Events(Start,End)/$entity","@odata.id":"https://outlook.office365.com
/api/v1.0/Users('user1@domain.com')/Events('AAMkADA1OWVjOTkxLTlmYmEtNDAwMS04YWU3LTNkNYDHE4YjU2OGI1ZABGBBBBBBD_fa49_h8OTJ5eGdjSTEF3BwBOcC
SV9aNzSoXurwI4R0IgBBBBBBBENAABOcCSV9aNzSoXurwI4R0IgAAHn0Cy0AAA=')","@odata.etag":"W/\"TnAklfWjc0qF7q8COEdDTHDAB5+uOdw==\"","Id":"AAMkADA1OWVjO
TkxLTlmYmEtNDAwMS04YWU3LTMHKNDE2YjU2OGI1ZABGAAAAAAD_fa49_h8OTJ5eGdjSTEF3BwBOcCSV9aNzSoXurwI4R0IgCCCCCCCENAABOcCSV9aNzSoXurwI4R0IgAAHn0Cy0AAA="
,"Start":"2016-08-13T15:00:00-07:00","End":"2016-08-13T16:00:00-07:00"}

有没有办法将结果加载到json.load并捕获@ odata.context,@ odata.id,@ odata.etag,Id,Start,End的各个值?

我试过了,但没有运气。

data = json.load(result)   
print data["@odata.context"]

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用json加载。在后台加载使用方法.read()所以如果你想使用它,你必须使用像StringIO这样的文件或文件/打开

像这样:

import urllib2
import json
import base64
test_load = "foo=bar"
user = "test"
pwd = "test"

opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request("http://scooterlabs.com/echo.json?%s" % test_load, data=b'data')
auth = base64.encodestring('%s:%s' % (user, pwd)).replace('\n', '')
request.add_header('Authorization', 'Basic %s' % auth)
request.add_header('Content-Type', 'application/json')
request.add_header('Accept', 'application/json')
request.get_method = lambda: 'POST'
result = opener.open(request).read()
jsons = json.loads(result)

print("FULL: %s" % result)
print(jsons[u'method'])
print(jsons[u'request'])

修改 似乎评论已经回答了问题......对不起