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)