¿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)?