Как использовать метод POST в Tornado?

Я пытаюсь использовать Tornado, чтобы запустить сервер и опубликовать сообщение. нить к нему. Я нашел много примеров того, как написать метод post в классе обработчика, но ни одного примера того, как написать запрос на публикацию. Мой текущий код вызывает выполнение метода post, но аргумент get _не получает данные --, он просто каждый раз печатает значение по умолчанию «Данные не получены». Что я делаю неправильно?

Мой код выглядит следующим образом:

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()

Правильно ли помещать строку, которую я хочу отправить, в параметр "body"? В некоторых примерах, которые я видел, например, здесь , кажется, что люди создают свои собственные параметры, но если я попытаюсь добавить новый параметр в запрос, например

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

, я просто получаю сообщение об ошибке «TypeError:init()получил неожиданный ключевой аргумент 'data'"

Спасибо!

19
задан Community 23 May 2017 в 10:30
поделиться