2012-04-28 8 views
18

私はTornadoを使ってサーバーを起動し、それに文字列を投稿しようとしています。私はハンドラクラスでpostメソッドを書く方法の例をたくさん見つけましたが、投稿要求を書く方法の例はありません。現在のコードではpostメソッドが実行されますが、get_argumentはデータを取得しません。毎回、デフォルトの "No data received"が出力されます。私は間違って何をしていますか?TornadoでPOSTメソッドを使用するには?

私のコードは次のようになります。

class MainHandler(tornado.web.RequestHandler): 
    def post(self): 
     data = self.get_argument('body', 'No data received') 
     self.write(data) 

application = tornado.web.Application([ 
    (r"/", MainHandler), 
]) 

if __name__ == "__main__": 

    def handle_request(response): 
     if response.error: 
      print "Error:", response.error 
     else: 
      print response.body 
     tornado.ioloop.IOLoop.instance().stop() 

    application.listen(8888)  
    test = "test data" 
    http_client = tornado.httpclient.AsyncHTTPClient() 
    http_client.fetch("http://0.0.0.0:8888", handle_request, method='POST', headers=None, body=test) 
    tornado.ioloop.IOLoop.instance().start() 

は、私が「身体」を行うには正しいことをパラメータで送信したい文字列を入れていますか?いくつかの例では、私はhereのように、人々が自分のパラメータを作成し、私は

http_client.fetch("http://0.0.0.0:8888", handle_request, method='POST', headers=None, data=test) 

のように、要求に新しいパラメータを追加しようとした場合、私はちょうど「TypeError例外を言ってエラーが出るようで、見てきました:init()に予期しないキーワード引数 'data'があります。 "

ありがとうございます!

答えて

32

it seems people create their own parameters

かなりです。ドキュメントから:

fetch(request, **kwargs)

Executes a request, returning an HTTPResponse.

The request may be either a string URL or an HTTPRequest object. If it is a string, we construct an HTTPRequest using any additional kwargs: HTTPRequest(request, **kwargs)

Link

のでkwargsからはthis methodから実際にあります。

とにかく、問題の本当のところに:どのようにPOSTデータを送信しますか?あなたは正しい軌道に乗っていましたが、あなたのPOSTデータをエンコードし、それをあなたの体kwargとして使用する必要があります。このように:

import urllib 
post_data = { 'data': 'test data' } #A dictionary of your post data 
body = urllib.urlencode(post_data) #Make it into a post request 
http_client.fetch("http://0.0.0.0:8888", handle_request, method='POST', headers=None, body=body) #Send it off! 

その後、データを取得する:

私がまさに必要
data = self.get_argument('data', 'No data received') 
+0

、感謝を! – user1363445

関連する問題