Ich habe einen Beispiel-PHP-Code zum Aufruf eines SOAP-Dienstes erhalten, den ich jetzt in Python konvertieren muss. Im PHP-Code setzen sie die Header wie folgt:Warum kann ich keine SOAP-Header in pysimplesoap setzen?
$auth = array();
$auth['token'] = 'xxx';
if ($auth) {
// add auth header
$this->clients[$module]->__setSoapHeaders(
new SoapHeader(
$namespace,
'auth',
$auth
)
);
}
So ist der auth
Header sollte wie folgt aussehen: ['token' => 'xxx']
. Ich lud dann die WSDL-Datei in SoapUI, das gab mir das folgende Beispiel xml:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sub="https://example.com/path/to/sub">
<soapenv:Header>
<sub:auth>
<token>?</token>
<!--Optional:-->
<user_id>?</user_id>
<!--Optional:-->
<user_token>?</user_token>
</sub:auth>
</soapenv:Header>
<soapenv:Body>
<sub:customer_logos_pull>
<!--Optional:-->
<language>?</language>
<!--Optional:-->
<limit>?</limit>
<!--Optional:-->
<options_utc>?</options_utc>
</sub:customer_logos_pull>
</soapenv:Body>
</soapenv:Envelope>
In pysimplesoap ich jetzt so etwas wie dies versuchen:
from pysimplesoap.client import SoapClient
WSDL = 'https://example.com/some/path/sub.wsdl'
TOKEN = 'xxx'
client = SoapClient(wsdl=WSDL, trace=True)
client['auth'] = {'token': TOKEN}
print client.customer_logos_pull({})
aber ich erhalte eine Fehlermeldung, dass ExpatError: not well-formed (invalid token): line 1, column 0
, was Sinn macht, , denn in der protokollierten xml ich sehe, dass der Header ist leer:
<soap:Header/>
ich habe versucht, den Code variiert, indem die sub:
b vor auth
wie folgt: client['sub:auth'] = {'token': TOKEN}
, aber ich bekomme den gleichen Fehler.
Weiß jemand, was ich hier falsch mache? Alle Tipps sind willkommen!
Ist es [pysimplesoap] verwenden (https://pypi.python.org/pypi/pysimplesoap) - Es ist nicht einmal installiert werden kann, wie es Art gebrochen hat:/ –
@JamesMills - Es spielt keine Sie müssen pysimplesoap per se sein. Ich muss es nur zur Arbeit bringen. Ich habe es auch mit Schaum versucht. Aber das kann ich auch nicht funktionieren: http://stackoverflow.com/questions/30874988/how-to-create-soap-header-with-python-suds-library Die Bibliothek, die ich benutze, spielt keine Rolle muss nur in Python sein, das ist alles. Wüsstest du, wie man es in einer anderen Bibliothek macht? – kramer65