Как размещать символы, не являющиеся ASCII, с помощью httplib, если типом содержимого является "application/xml"

Я реализовал модуль PIVOTAL Tracker API в Python 2.7. Pivotal Tracker API ожидает, что данные POST будут XML-документом, а "application/xml" - типом контента.

Мой код использует 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). Он отлично работает с application/xml, если используются только символы ASCII.

Существует ли простой способ размещения данных приложения/xml, содержащих не-Символы ASCII или мне придется прыгать через обручи (например, используя Twistd и пользовательского производителя для полезной нагрузки POST)?

6
задан Matthew Gertner 3 November 2011 в 10:15
поделиться