urllib2和json

pup*_*pup 70 python json urllib2

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

Bob*_*ant 136

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()
Run Code Online (Sandbox Code Playgroud)

  • 使用python3和urllib,另外我必须对我的json解析数据进行编码,以使其工作`data = json.dumps([1,2,3]).encode("utf8)`.参见http:// stackoverflow的.com /一个/3757139分之5441022 (3认同)

小智 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()
Run Code Online (Sandbox Code Playgroud)

让我永远想出这个,所以我希望它可以帮助别人.

  • 非常感谢你!5年后,这仍然打破!! (2认同)

Mes*_*ssa 17

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

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

  • 对于许多系统,这是行不通的.请参阅下面的Bob Van Zant的回答. (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())
Run Code Online (Sandbox Code Playgroud)

  • 这不会发送它只接收它的JSON. (3认同)