我已经在Python 2.7中实现了Pivotal Tracker API模块。 Pivotal Tracker API预计POST数据是XML文档,“application/xml”是内容类型。当内容类型为“application/xml”时,如何使用httplib发布非ASCII字符
我的代码使用urlib/httplib的发布文档,如图所示:
request = urllib2.Request(self.url, xml_request.toxml('utf-8') if xml_request else None, self.headers)
obj = parse_xml(self.opener.open(request))
这就产生了一个异常时,XML文本中包含非ASCII字符:尽可能靠近我可以
File "/usr/lib/python2.7/httplib.py", line 951, in endheaders
self._send_output(message_body)
File "/usr/lib/python2.7/httplib.py", line 809, in _send_output
msg += message_body
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 89: ordinal not in range(128)
看到,httplib._send_output正在为消息有效载荷创建一个ASCII字符串,可能是因为它期望数据被URL编码(application/x-www-form-urlencoded)。只要使用ASCII字符,它就可以在application/xml下正常工作。
是否有一种直接的方式来发布包含非ASCII字符的应用程序/ xml数据,或者我将不得不跳过箍环(例如使用Twistd和POST负载的自定义生产者)?
也许你可以改变头文件的内容类型,但是如何解决这个问题呢? 'msg'在python库中构造,并且是字节字符串。 – jro
@jro:它与HTTP无关。看看上面的* complete *例子。 – jfs
我知道这导致了这个问题,但我的观点是他无法控制'msg'变量。我同意你的观点,但是我的问题更多的是这个事实如何帮助他在libs中创建'msg'作为msg =“\ r \ n”.join(self._buffer) '? – jro