2013-03-25 47 views
0

我在一些json數據的主體中發送post請求,在服務器上進行處理,我希望以json數據的形式將結果返回給客戶端(在手機上的C++應用程序),並且因此解析移動。 我有內部代碼如下:Post print dictionary/json將錯誤返回給客戶端

class ServerHandler(tornado.web.RequestHandler): 
    def post(self): 
     data = tornado.escape.json_decode(self.request.body) 
     id = data.get('id',None) 
     #process data from db (take a while) and pack in result which is dictinary 
     result = process_data(id)# returns dictionary from db= takes time 
     print 'END OF HANDLER' 
     print json.dumps(result) 

     #before this code below I have tried also 
     #return result 
     #return self.write(result) 
     #return self.write(json.dumps(result)) 
     #return json.dumps(result) 
     self.set_header('Content-Type', 'application/json') 
     json_ = tornado.escape.json_encode(result) 
     self.write(json_) 
     self.finish() 
     #return json.dumps(result) 

我總是印刷'END OF HANDLER'及以下valid dictinary/json在控制檯上,但是當我在客戶端移動閱讀我總是得到

<html><title>405: Method Not Allowed</title><body>405: Method Not Allowed</body></html> 

沒有人有任何的想法是什麼錯誤 ?
(我用CIwGameHttpRequest發送請求,並在文件是靜態的它工作=> name.json但現在同樣的內容在POST請求給錯誤。)

+0

嘗試使用CIwHTTP而不是CIwGameHttpRequest。如果它也不起作用,那麼你正在調用錯誤的方法。 – noob 2013-03-26 20:45:36

回答

2

錯誤(HTTP 405不允許的方法),意味着你已向有效的網址發送請求,但您使用的HTTP動詞(例如GETPOSTPUT,DELETE)不能與該URL一起使用。

您的網絡服務代碼似乎處理POST動詞,如post方法名稱以及傳入請求似乎具有請求主體這一事實所證明。您沒有向我們展示您的C++客戶端代碼,因此我所能做的就是推測它正在發出GET請求。你的C++代碼是否調用Request->setPOST();? (我還沒有和CIwGameHttpRequest合作過,但谷歌搜索它,我發現this page從中我把該行的代碼。)

我沒有與龍捲風工作過,但我想,有一些機制的地方,允許您將URL連接到RequestHandler。鑑於你有一個405方法不允許的錯誤,而不是404找不到,看來,然而,這是做你已經做到了正確。你向URL發出一個GET請求給Tornado,它確定它應該調用你的處理程序,並且只有當它試圖使用你的處理程序時,它意識到它不能處理GET請求,得出結論說你的處理程序(因此它的URL)不支持GET s並返回405錯誤。

相關問題