2017-12-18 3 views
0

Hallo Ich benutze zeep, um eine soap-basierte Web-Service zu konsumieren, und ich bekomme weiterhin HTTP-Status 415 Fehler. Ich grabe ein wenig nach unten und verwenden PyCharm Debuggger und stellte fest, dass der Grund war:Python Zeep - HTTP-Status 415 (kein Inhalt verfügbar)

'Cannot process the message because the content type \'text/xml; charset=utf-8 XaSOfalw: rtt; ___utmvmBfuwVEwB=yEnqIuCmRhw\' was not the expected type \'text/xml; charset=utf-8\'.'

Was mit dem Inhaltstyp ist falsch? und wie ändere ich es in Zeep?

Ich habe gerade einen einfachen Test-Code, der wie folgt aussieht:

from zeep import Client 

pretend_wsdl = 'https://pretendwsdl' 
client = Client(wsdl=pretend_wsdl) 

res = client.service.NameOfService() 
print(res) 

und erhalten diesen Fehler:

zeep.exceptions.TransportError: Server returned HTTP status 415 (no content available)

Antwort

0

I gelöst haben das Problem, indem plugins in zeep Client.

Mein Code sieht wie folgt aus:

from zeep import Client 
from zeep import Plugin 


class MyLoggingPlugin(Plugin): 

    def ingress(self, envelope, http_headers, operation): 
     return envelope, http_headers 

    def egress(self, envelope, http_headers, operation, binding_options): 
     http_headers['Content-Type'] = 'text/xml; charset=utf-8;' 
     return envelope, http_headers 


pretend_wsdl = 'https://pretendwsdl.com' 

client = Client(wsdl=pretend_wsdl, plugins=[MyLoggingPlugin()]) 

res = client.service.NameOfService() 

print(res) 

Ich finde es seltsam, weil der Standard-Inhaltstyp von zeep ist text/xml; Zeichensatz = utf-8; und die Wsdl, die ich verwende, denkt nicht, dass der Inhaltstyp von Zeep text/xml ist; Zeichensatz = utf-8;

Also habe ich zeep plugins verwendet, um den Inhaltstyp explizit auf text/xml zu setzen; Zeichensatz = utf-8; und es funktioniert überraschend.

Verwandte Themen