2016-05-16 37 views
-1

我正在尝试使用Tornado制作REST API的请求处理程序。 但我似乎找不到方法来发送请求和/或与Tornado正确接收请求。发送帖子,手动获取请求到RequestHandler

我的代码是:

class VersionHandler2(tornado.web.RequestHandler): 
    def post(self,*args,**kwargs): 
     print "post" 
     print kwargs 
     print args 
     response = { 'version': '3.5.1'} 
     x = self.get_argument('query') 
     self.write(kwargs) 
    def get(self, *args, **kwargs): 
     print "GET" 
     response = { 'GET': '3.5.1'} 
     self.write(response) 

if __name__ == '__main__': 
    sx = Server(7231,[ (r"/prost/", VersionHandler2),(r"/about/", VersionHandler)]) 

    sx.startServer() 

GET方法正在发送的响应,但POST方法是不是能够得到这个职位数据。我曾尝试使用高级休息客户端SENSE,但没有运气。我试图将数据作为JSON发送,并使用正确的参数并将其作为json发送。

如ARC所示我请求体是

本地主机:7231/ 内容类型:应用/ JSON 的Content-Length:39 源消息

POST /prost/ HTTP/1.1 
HOST: localhost:7231 
localhost: 7231/ 
content-type: application/json 
content-length: 39 

{ 
"query": [ 
"paul" 
] 
} 

另外,是否有可能使用GET方法发送JSON查询? 我正在尝试构建类似弹性搜索的内容,并且想要使用4个CRUD方法 - >将每个方法的Post,Put,Get,Delete和发送JSON数据作为查询。

回答

2

POST请求正文位于self.request.body

如果POST请求来自HTML表单,则self.get_argument(name)将返回HTML表单的命名字段。但是如果你有一个API客户端发送JSON到你的服务器,而不是发送表单编码的数据,那么你应该使用像json.loads(self.request.body)这样的东西。

+0

这似乎是正确的。但为什么它写处处使用self.get_argument https://gist.github.com/cjgiridhar/3274687 和其他几个地方 –

+0

编辑我的答案解释。 –