龙卷风。怎么得到raw request.body?

时间:2015-01-22 14:01:37

标签: python python-3.x tornado

人。我不能用Tornado获取原始身体数据。我请求 curl -i localhost:8888 -d '{"a":12}'并期望在request.body中获取字符串'{"a":12}',但收到'{a:12}'。 源代码:

import tornado.web
import tornado.ioloop

class MainHandler(tornado.web.RequestHandler):
    def post(self):
        self.write(self.request.body)

if __name__ == "__main__":
    app = tornado.web.Application({
        (r"/", MainHandler)
    })
    app.listen(3000)
    tornado.ioloop.IOLoop.instance().start()

卷曲结果:

$ curl 127.0.0.1:3000 -i -d {"a":12}
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: TornadoServer/4.0.2
Content-Length: 6
Date: Thu, 22 Jan 2015 14:00:19 GMT

{a:12}

Python版本为3.4.2,Tornado版本为4.0.2

2 个答案:

答案 0 :(得分:3)

这是一个shell引用问题:shell正在删除命令curl 127.0.0.1:3000 -i -d {"a":12}中的引号。如果你将论点引用到-d(你在问题正文中做了curl -i localhost:8888 -d '{"a":12}'),你应该得到你期望的结果。

答案 1 :(得分:2)

使用self.request.connection.stream.read_bytes直接读取数据流。

Source