2013-03-25 73 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错误。

相关问题