토네이도 지원 Content-Type "application/json"
?토네이도 응용 프로그램/json 지원
은 (stream_request_body = False
가정) 호출 스택에 따르면, 요청 본문을 파싱 불리는 유일한 방법은 "application/x-www-form-urlencoded"
및 "multipart/form-data"
토네이도 지원 Content-Type "application/json"
?토네이도 응용 프로그램/json 지원
은 (stream_request_body = False
가정) 호출 스택에 따르면, 요청 본문을 파싱 불리는 유일한 방법은 "application/x-www-form-urlencoded"
및 "multipart/form-data"
용액 매우 사소한 허용 parse_body_arguments (httputil.py 662)이다. 수신 된 본문은 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/
*'에 'application/json'을 자동으로 설정합니다. * 방법이 아니라 클라이언트에 따라 다릅니다. 'application/json'을 POST하는 것은 완벽하게 유효합니다; Flask의 ['request.get_json()'/'request.json'] (http://flask.pocoo.org/docs/0.10/api/#flask.Request.get_json)은 요청 내용이 기본적으로 JSON 만 제공합니다 유형이 올바르게 설정되었습니다. –
아마도 내 질문에 명확한 것은 아니지만이 문제는 해결되지 않았습니다. Martijn이 지적했듯이 요청 콘텐츠 유형은 'application/json'일 수 있습니다. 소스 코드에 따르면 지원되는 유일한 유형은 application/x-www-form-urlencoded이며 클라이언트는 해당 유형을 설정하거나 요청 본문을 무시하는 위험을 감수해야합니다. 토네이도 워드 프로세서는 응용 프로그램/json을 지원하기 위해 그것을 지원하기 위해 오버라이드해야한다고 말하지만, 제 질문은 소스 코드에서 무엇인가 놓친 것인지를보기위한 것이 었습니다. 그렇지 않은 경우 지원이 부족하다는 것이 버그입니다. – bcwebb88
설명해 주셔서 감사합니다. 동의, 내 솔루션은 당신이 찾고있는 것이 아닙니다; 그래서 토네이도 서버 지원 부족은 오히려 생략 일 것입니다. 그럼에도 불구하고 저는 개인적으로 클라이언트의'Content-Type'을 무시할 것입니다. 그래서'curl'과 같은 간단한 도구를 사용해도 코드를 테스트 할 수 있습니다 ... –
*'application/json' *을 (를) 지원한다는 것은 무엇을 의미합니까? 요청시 또는 응답을 보낼 때? –
요청이있을 때 - 토네이도는 이미 application/x-www-form-urlencoded가 될 POST 동안 응답 ' – bcwebb88