是否支持龙卷风Content-Type "application/json"
?龙卷风应用程序/ json支持
根据(假设stream_request_body = False
)调用堆栈,称为解析请求主体的唯一方法是parse_body_arguments(httputil.py 662),其只接受"application/x-www-form-urlencoded"
和"multipart/form-data"
是否支持龙卷风Content-Type "application/json"
?龙卷风应用程序/ json支持
根据(假设stream_request_body = False
)调用堆栈,称为解析请求主体的唯一方法是parse_body_arguments(httputil.py 662),其只接受"application/x-www-form-urlencoded"
和"multipart/form-data"
该解决方案是相当微不足道的。你只需要json.loads()
收到的机构,并相信它是一个适当的JSON编码字典(如果你想,捕捉异常并提供有意义的反馈)。你不能指望application/json
在Content-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()
可以测试此使用例如curl
:
curl -d '{"hello": "world"}' http://localhost:8888/
*在POST已经是应用程序/ 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类型已被正确设置。 – 2014-11-03 15:54:19
也许我的问题不是特别清楚,但这并没有解决它。正如Martijn所指出的,请求内容类型可以是'application/json'。根据源代码,唯一受支持的类型是application/x-www-form-urlencoded,客户端必须设置该类型或者忽略其请求体。龙卷风文档确实说,为了支持application/json,你必须重写以支持它,但是我的问题更多的目的是看看我是否漏掉了源代码中的某些东西,如果没有,缺乏支持就是一个错误。 – bcwebb88 2014-11-03 18:15:08
谢谢澄清。同意,我的解决方案不是你想要的;所以在龙卷风服务器缺乏支持将是一个遗漏。尽管如此,我个人会忽略客户端的'Content-Type',这样你甚至可以使用简单的工具来测试你的代码,比如'curl' ... – 2014-11-03 18:22:33
你是什么意思*支持'application/json' *?在请求或发送响应时? – 2014-11-03 15:07:14
只是在请求 - 龙卷风自动设置'应用程序/ json'在回应 – bcwebb88 2014-11-03 18:10:50