¿Cómo publico caracteres que no son ASCII usando httplib cuando content-type es "application / xml"

Implementé un módulo API de Pivotal Tracker en Python 2.7. LosPivotal Tracker API espera que los datos POST sean un documento XML y que "application / xml" sea el tipo de contenido.

Mi código usa urlib / httplib para publicar el documento como se muestra:

    request = urllib2.Request(self.url, xml_request.toxml('utf-8') if xml_request else None, self.headers)
    obj = parse_xml(self.opener.open(request))

Esto produce una excepción cuando el texto XML contiene caracteres no 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)

Tan cerca como puedo ver, httplib._send_output está creando una cadena ASCII para la carga útil del mensaje, presumiblemente porque espera que los datos estén codificados en URL (application / x-www-form-urlencoded). Funciona bien con application / xml siempre que solo se usen caracteres ASCII.

¿Existe una manera directa de publicar datos de aplicaciones / xml que contengan caracteres que no sean ASCII o tendré que saltar a través de aros (por ejemplo, usando Twistd y un productor personalizado para la carga POST)?

Respuestas a la pregunta(4)

Su respuesta a la pregunta