0

サーバーで処理するために、いくつかのjsonデータの本文で投稿リクエストを送信しています。結果は、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を使用しており、ファイルがstatic => name.jsonの場合に機能しますが、同じコンテンツがポストリクエストでエラーを出します。)

4

1 に答える 1

2

エラー(HTTP 405メソッドは許可されていません)は、有効なURLにリクエストを送信したが、そのURLでは使用できないHTTP動詞(、、、など)を使用していることを意味し GETますPOSTPUTDELETE

メソッド名と、着信リクエストにリクエスト本文があるように見えることからもわかるように、WebサービスコードはPOST動詞を処理しているように見えます。あなたは私たちにあなたのC++クライアントコードを見せていないので、私にできることはそれがリクエストpostをしていると推測することだけです。GETあなたのC++コードは呼び出しRequest->setPOST();ますか?(これまでに作業したことはありませんCIwGameHttpRequestが、グーグルで検索すると、このページからそのコード行を取得しました。)

私はこれまでTornadoを使用したことがありませんが、URLをに接続できるメカニズムがどこかにあると思いますRequestHandler。404NotFoundではなく405MethodNot Allowedエラーが発生していることを考えると、これは正しく行われているようです。TornadoにURLのリクエストを発行するGETと、ハンドラーを呼び出す必要があると判断され、ハンドラーを使用しようとしたときにのみ、GETリクエストを処理できないことがわかり、ハンドラー(したがってそのURL)は処理できないと結論付けます。 tはsをサポートGETし、405エラーを返します。

于 2013-03-25T22:50:42.290 に答える