扭曲的 IBodyProducer 不适用于 unicode

twisted IBodyProducer don't work with unicode

我使用offical example发送unicode字符串:

agent.request('POST',"http://localhost:8088/order", Headers({'Content-Type': ['application/json']}), StringProducer("{u'aaa':1}"))

但它不起作用,我在服务器端什么也得不到:

class FormPage(Resource):
    def render_POST(self, request):
        json_str = request.content.read()
        print json_str

root = Resource()
root.putChild("order", FormPage())
factory = Site(root)
reactor.listenTCP(8088, factory)
reactor.run()

怎么做到的?

这是故意的。 HTTP 主体是字节,而不是文本。如果您想 return 文本 JSON,请将 JSON 编码为 UTF-8(标准中指定的默认编码,您应该使用的唯一编码)。

这也不是您的代码的唯一问题:u 前缀和单引号是 Python 语法,而不是 JSON。相反,这样做:

agent.request('POST',"http://localhost:8088/order",
              Headers({'Content-Type': ['application/json']}), 
              StringProducer(u"{"aaa": 1}".encode("utf-8"))

应该可以。