Post print dictionary/json返回错误给客户端



我正在发送一些json数据的主体post请求,在服务器上处理,我希望结果以json数据的形式返回客户端(c++在手机上的应用程序),因此在移动设备上解析。我在处理程序中有以下代码:

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>

有谁知道是什么bug吗?
(我使用CIwGameHttpRequest发送请求,它的工作时,文件是静态的=>名称。Json,但现在相同的内容是在post请求给出错误。)

这个错误(HTTP 405方法不允许)意味着你已经向一个有效的URL发出请求,但是你正在使用一个HTTP动词(例如GET, POST, PUT, DELETE),不能与该URL一起使用。

您的web服务代码似乎处理POST谓词,post方法名称以及传入请求似乎具有请求体的事实证明了这一点。您没有向我们展示您的c++客户端代码,因此我所能做的就是推测它正在发出GET请求。你的c++代码调用Request->setPOST();吗?(我以前没有使用过CIwGameHttpRequest,但在谷歌上搜索它,我找到了这个页面,我从中获取了那行代码。)

我以前没有使用龙卷风,但我想在某个地方有一些机制可以让你将URL连接到RequestHandler。考虑到你有一个405方法不允许的错误,而不是404没有找到,似乎无论如何,这是你已经做了正确的。你发出GET请求龙卷风的URL,它决定它应该调用你的处理程序,只有当它试图使用你的处理程序,它意识到它不能处理GET请求,得出结论,你的处理程序(因此它的URL)不支持GET s,并返回一个405错误。

相关内容

最新更新