谁能指出一个教程,向我展示如何使用urllib2和JSON格式的数据进行POST请求?
Answers:
仅当服务器无需检查内容类型标头时,Messa的答案才有效。如果您希望它真正起作用,则需要指定一个内容类型标题。这是Messa的答案,修改后包含了内容类型标题:
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()
data = urllib.parse.urlencode(data)
还可以应用?
不管urllib用于弄清楚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()
您当然想破解标头以拥有适当的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.load在服务器端的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)
data = json.dumps([1, 2, 3]).encode("utf8)
。参见stackoverflow.com/a/5441022/3757139