0

我在一些 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>

有谁知道什么是错误?
(我正在使用 CIwGameHttpRequest 发送请求,当文件为静态 =>name.json 但现在相同的内容在发布请求中给出错误时它可以工作。)

4

1 回答 1

2

错误(HTTP 405 Method Not Allowed)表示您已向有效 URL 发出请求,但您使用的 HTTP 动词(例如GET, POST, PUT, DELETE)不能与该 URL 一起使用。

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

我以前没有使用过 Tornado,但我想在某处有某种机制允许您将 URL 连接到RequestHandler. 鉴于您有 405 Method Not Allowed 错误,而不是 404 Not Found,看来无论如何您已经正确完成了。您向 Tornado 发出GETURL 请求,它确定它应该调用您的处理程序,并且只有当它尝试使用您的处理程序时,它才意识到它无法处理GET请求,并得出结论认为您的处理程序(以及它的 URL)没有t 支持GETs 并返回 405 错误。

于 2013-03-25T22:50:42.290 回答