2010-05-10 5 views
6

Ich habe eine Anwendung in Python 2.5, die Daten durch Schaum 0.3.6 sendet.Wie fügen Sie HTTP-Header in Schaum 0.3.6 hinzu?

Das Problem ist, dass die Daten nicht-ASCII-Zeichen enthält, also muss ich die folgenden Header in der SOAP-Nachricht existieren:

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

und der Header, der nur in der SOAP-Nachricht vorhanden ist:

Content-Type = "text/html"

ich weiß, dass es in fixiert suds 0.4, aber es erfordert Python2.6 und ich brauche Python2.5, weil ich CentOS benutze und es diese Version benötigt. Die Frage ist also:

Wie könnte ich ändern oder neue HTTP-Header zu einer SOAP-Nachricht hinzufügen?

Antwort

4

Wenn Sie den Öffner in Urllib2 erstellen, können Sie einige Handler verwenden, um zu tun, was Sie wollen. Zum Beispiel, wenn Sie einen neuen Header in Schaum hinzufügen möchten, sollten Sie etwas tun:

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

wo HTTPSudsPreprocessor Ihren eigenen Handler ist, und es sollte wie folgt aussehen:

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 

Die Methoden, die Sie überschreiben müssen, hängen davon ab, was Sie tun möchten. Siehe urllib2 Dokumentation in Python.org

12

Mindestens in Schaum 0,4 HTTP-Header kann auch in an den Konstruktor oder über die set_options Methode übergeben wird (vielleicht früher?):

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

Dies funktioniert, und es ist wahrscheinlich besser als Definieren eines neuen Handlers, nur um Header hinzuzufügen – simao

Verwandte Themen