是否支持龍捲風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