tornado中requesthandler收到的json数据解析出错,请问如何解析post请求中的json格式数据

发布于 2022-09-01 17:49:56 字数 1535 浏览 11 评论 0

写了一个简单的tornado程序,目的接受脚本post的json数据,解析并response,返回json数据。

client脚本如下:

#  -*- coding:utf-8 -*-
import urllib
import urllib2
import json

url='http://127.0.0.1:8888'
values ={'user':'a','passwd':'b'}
jdata = json.dumps(values)
req = urllib2.Request(url)
req.add_data(jdata)
print req.headers
response = urllib2.urlopen(req)

tornado程序如下:

# -*- coding:utf-8 -*-
import tornado.ioloop
import tornado.web
import tornado.httpserver
from tornado.options import define, options
import json

define("port",default=8888,help='run a test')
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        info={'user':'leno'}
        jinfo=json.dumps(info)
        self.write(jinfo)

    def post(self,*args,**kwargs):
        print 'post message'
        print self.request.remote_ip
        print self.request.body_arguments
        user=self.get_body_argument('user')
        pw=self.get_body_argument('passwd')
        print user
        jdata=json.loads(user)
        print jdata
        data=json.loads(jdata)

    def set_default_headers(self):
        self.set_header('Content-type','application/json;charset=utf-8')

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

在get_body_argument处出错:Missing argument user,
print self.request.body_arguments则显示{'{"passwd": "b", "user": "a"}': ['']}
在client处却正常,请问如何解决?谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

吻泪 2022-09-08 17:49:56

如果你POST 的时json数据,那么解析 请求的body即可

try:
    data = json.loads(self.request.body)
except Except, e:
    pass
如果没结果 2022-09-08 17:49:56

最后发现不能用get_argumentm,采用的是如下:

from tornado.escape import json_decode
def post(self,*args,**kwargs):
        print 'post message'
        print self.request.remote_ip
        print self.request.body_arguments
        data=json_decode(self.request.body)
        user=data['user']
        pw=data['passwd']
        print user,pw
        jdata=json.dumps(data)
        print jdata
        self.write(jdata)

开始看见别人ajax用get_argument,以为能直接解析json,被误导了。中间拿到request的body,自己解析后就行了,还是感谢rsj217的回答

無處可尋 2022-09-08 17:49:56

试试:pw=self.get_argument('user')

〆凄凉。 2022-09-08 17:49:56

保证解析请求体中的参数

self.get_body_argument('user')

而不是请求链接中的参数

Python3编码错误,没找到有效解决方法,最后 :

for k,v in self.request.body_arguments.items():
    body_kw[k] = str(v[0], encoding='utf-8')
    if body_kw[k] == 'true':
        body_kw[k] = True
    if body_kw[k] == 'false':
        body_kw[k] = False
print(body_kw)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文