2010-05-10 38 views
6

Tengo una aplicación en python 2.5 que envía datos a través de espuma 0.3.6.Cómo agregar encabezados http en espuma 0.3.6?

El problema es que los datos contienen caracteres no ASCII, así que necesito la siguiente cabecera de existir en el mensaje SOAP:

Content-Type = "text/html; charset =" UTF-8"

y la cabecera que existe en el mensaje SOAP es simplemente:

Content-Type = "text/html"

sé que se fija en suds 0.4, pero requiere Python2.6 y NECESITO Python2.5 porque uso CentOS y necesita esa versión. Entonces la pregunta es:

¿Cómo podría cambiar o agregar nuevos encabezados HTTP a un mensaje SOAP?

Respuesta

4

Cuando crea el abridor en urllib2, puede usar algunos controladores para hacer lo que quiera. Por ejemplo, si desea agregar una nueva cabecera en espuma, debe hacer algo como esto:

https = suds.transport.https.HttpTransport() 
opener = urllib2.build_opener(HTTPSudsPreprocessor) 
https.urlopener = opener 
suds.client.Client(URL, transport = https) 

donde HTTPSudsPreprocessor es su propio manejador, y debe tener este aspecto:

class HTTPSudsPreprocessor(urllib2.BaseHandler): 

    def http_request(self, req): 
     req.add_header('Content-Type', 'text/xml; charset=utf-8') 
     return req 

    https_request = http_request 

El los métodos que debe anular dependen de lo que desee hacer. Consulte la documentación urllib2 en Python.org

12

Por lo menos en 0,4 espuma cabeceras HTTP también se pueden pasar en al constructor o por medio del método de set_options (tal vez antes?):

client = suds.client.Client(url, headers={'key': 'value'}) 
client.set_options(headers={'key2': 'value'}) 
+0

Esto funciona y es probablemente mejor que definir un nuevo controlador solo para agregar encabezados – simao

Cuestiones relacionadas