有人能指出一个教程,告诉我如何使用urllib2进行POST请求,数据是JSON格式吗?
答案 0 :(得分:135)
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()
答案 1 :(得分:36)
无论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()
让我永远想出这个,所以我希望它可以帮助别人。
答案 2 :(得分:17)
示例 - 将一些编码为JSON的数据作为POST数据发送:
import json
import urllib2
data = json.dumps([1, 2, 3])
f = urllib2.urlopen(url, data)
response = f.read()
f.close()
答案 3 :(得分:5)
要阅读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())
答案 4 :(得分:3)
你当然希望破解标题以获得正确的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。在服务器端加载POST。
编辑:顺便说一下,在发送之前你必须urllib.urlencode(mydata_dict)
。如果不这样做,POST将不是服务器所期望的
答案 5 :(得分:2)
这对我有用:
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)