我已經在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