Tornado应用程序/ json支持

bcw*_*b88 3 python json tornado

龙卷风支持Content-Type "application/json"吗?

根据调用堆栈(假设stream_request_body = False),调用请求体的唯一方法是parse_body_arguments(httputil.py 662),它只接受"application/x-www-form-urlencoded""multipart/form-data"

Kar*_*bat 6

解决方案非常简单.你只需要json.loads()收到的身体并相信它是一个正确的JSON编码字典(如果你愿意,抓住异常并提供有意义的反馈).你不能指望application/jsonContent-Type; 在一个已经存在的POST期间application/x-www-form-urlencoded.

这是一个示例服务器:

import json
import tornado.httpserver
import tornado.ioloop
import tornado.web

class MyHandler(tornado.web.RequestHandler):
    def post(self):
        data = json.loads(self.request.body.decode('utf-8'))
        print('Got JSON data:', data)
        self.write({ 'got' : 'your data' })

if __name__ == '__main__':
    app = tornado.web.Application([ tornado.web.url(r'/', MyHandler) ])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(8888)
    print('Starting server on port 8888')
    tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

您可以使用例如curl:

curl -d '{"hello": "world"}' http://localhost:8888/
Run Code Online (Sandbox Code Playgroud)

  • *在POST期间已经是application / x-www-form-urlencoded。*这取决于客户端,而不取决于方法。POST`application / json`是完全有效的;Flask的[`request.get_json()/ /request.json`](http://flask.pocoo.org/docs/0.10/api/#flask.Request.get_json)默认情况下仅在请求内容时为您提供JSON类型已正确设置。 (2认同)