urllib2和json

任何人都可以指出一个教程,告诉我如何使用urllib2与JSON格式的数据做POST请求?

Messa的答案只有在服务器不打扰检查内容types标题时才有效。 你需要指定一个内容types头,如果你想真的有效。 这里是Messa的答案修改为包含一个内容types的头文件:

import json import urllib2 data = json.dumps([1, 2, 3]) req = urllib2.Request(url, data, {'Content-Type': 'application/json'}) f = urllib2.urlopen(req) response = f.read() f.close() 

不pipeurllib是用来弄清楚Content-Length似乎被json弄糊涂了,所以你必须自己计算一下。

 import json import urllib2 data = json.dumps([1, 2, 3]) clen = len(data) req = urllib2.Request(url, data, {'Content-Type': 'application/json', 'Content-Length': clen}) f = urllib2.urlopen(req) response = f.read() f.close() 

让我永远解决这个问题,所以我希望它可以帮助别人。

示例 – 将一些编码为JSON的数据作为POST数据发送:

 import json import urllib2 data = json.dumps([1, 2, 3]) f = urllib2.urlopen(url, data) response = f.read() f.close() 

要阅读json响应使用json.loads() 。 这是示例。

 import json import urllib import urllib2 post_params = { 'foo' : bar } params = urllib.urlencode(post_params) response = urllib2.urlopen(url, params) json_response = json.loads(response.read()) 

您当然想要破解头文件以获得适当的Ajax请求:

 headers = {'X_REQUESTED_WITH' :'XMLHttpRequest', 'ACCEPT': 'application/json, text/javascript, */*; q=0.01',} request = urllib2.Request(path, data, headers) response = urllib2.urlopen(request).read() 

并json.loads在服务器端的POST。

编辑:顺便说一下,你必须urllib.urlencode(mydata_dict)发送之前。 如果你不这样做,POST不会是服务器的期望

这对我来说是有效的:

 import json import requests url = 'http://xxx.com' payload = {'param': '1', 'data': '2', 'field': '4'} headers = {'content-type': 'application/json'} r = requests.post(url, data = json.dumps(payload), headers = headers)