扭曲的 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"))
应该可以。
我使用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"))
应该可以。