urllib2和json

时间:2010-07-20 13:40:00

标签: python json urllib2

有人能指出一个教程,告诉我如何使用urllib2进行POST请求,数据是JSON格式吗?

6 个答案:

答案 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)