首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Tornado中使用POST方法?

如何在Tornado中使用POST方法?
EN

Stack Overflow用户
提问于 2012-04-29 06:10:19
回答 1查看 43.8K关注 0票数 22

我正在尝试使用Tornado启动一个服务器并向其发送一个字符串。我发现了许多关于如何在处理程序类中编写post方法的示例,但没有关于如何编写post请求的示例。我的当前代码确实导致了post方法的执行,但是get_argument并没有获得数据--它每次都只打印默认的"No data received“。我做错了什么?

我的代码如下所示:

代码语言:javascript
复制
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“参数中是正确的做法吗?在我见过的一些示例中,比如here,似乎人们创建了他们自己的参数,但是如果我尝试向请求添加一个新参数,比如

代码语言:javascript
复制
http_client.fetch("http://0.0.0.0:8888", handle_request, method='POST', headers=None, data=test)

我刚收到一个错误,说"TypeError:init() get A unexpected argument 'data'“

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-29 09:51:32

似乎人们创建了他们自己的参数

不完全是。从文档中:

fetch(请求,**kwargs)

执行一个请求,返回一个HTTPResponse。

请求可以是string URL或HTTPRequest对象。如果它是一个字符串,我们使用任何额外的kwargs构造一个请求: HTTPRequest (HTTPRequest,**kwargs)

(Link)

所以kwargs实际上来自this method

无论如何,真正的问题是:如何发送POST数据?你是在正确的轨道上,但你需要对你的帖子数据进行url编码,并将其用作你的body kwarg。如下所示:

代码语言:javascript
复制
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!

然后获取数据:

代码语言:javascript
复制
data = self.get_argument('data', 'No data received')
票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10367981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档