tornado处理post请求的json数据

来源:互联网 发布:单反照片导入mac 编辑:程序博客网 时间:2024/06/06 03:48

原文链接: tornado处理post请求的json数据

方式一, urllib.parse.urlencode
代码
server

class MainHandler(RequestHandler):    def post(self):        param = self.get_argument('param')        print(type(param))        print(param)        param = eval(param)        print(type(param))        print(param)        self.write('OK')

client

import urllib.parseimport urllib.requesturl = "http://172.16.1.239:8888/"req_dict = {'param': 'param'}req_encode = urllib.parse.urlencode(req_dict)req_post = req_encode.encode('utf-8')print(req_post)headers = {}req = urllib.request.Request(url=url, headers=headers, data=req_post)res = urllib.request.urlopen(req)res = res.read().decode('utf-8')

输出
server

<class 'str'>{'k': 'v'}<class 'dict'>{'k': 'v'}

client

b'param=%7B%27k%27%3A+%27v%27%7D'OK

方式二, json
代码
server

class MainHandler(RequestHandler):    def post(self):        param = self.request.body.decode('utf-8')        prarm = json.loads(param)        print(param)        self.write('Ok')

client

import jsonimport urllib.parseimport urllib.requesturl = "http://172.16.1.239:8888/"param = {'k': 'v'}req_dict = {'param': param}req_json = json.dumps(req_dict)req_post = req_json.encode('utf-8')print(req_post)headers = {'Content-Type': 'application/json'}req = urllib.request.Request(url=url, headers=headers, data=req_post)res = urllib.request.urlopen(req)res = res.read().decode('utf-8')print(res)

输出
server

{"param": {"k": "v"}}

client

b'{"param": {"k": "v"}}'OK

方式二client请求方式一的server, server会报如下错误
WARNING:tornado.general:400 POST /start_plus (172.16.1.239): Missing argument param

同样

方式一client请求方式二的server, server会报如下错误
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

tornado只实现了格式为formdata以及urlencode两种方式的post数据的自动解析

1 0
原创粉丝点击