2016-05-16 36 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

編輯我的答案解釋。 –