2017-01-06 1 views
0

Zum ersten Mal mit SOAP, und ich habe mehrere Instanzen von ähnlichen Fehlermeldungen gefunden, aber nichts, das scheint für mich zu gelten.Python - SOAP-Server nicht erkannt Wert von HTTP-Header

Code ist in Python (3.5) geschrieben. Hier

ist das genaue Beispiel von der Seite Ich versuche, die Anfrage zu machen:

POST /WS/OpenAPI.asmx HTTP/1.1 
Host: bms.kaseya.com 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "https://bms.kaseya.com/Authenticate" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <Authenticate xmlns="https://bms.kaseya.com/"> 
     <companyName>string</companyName> 
     <userName>string</userName> 
     <password>string</password> 
    </Authenticate> 
    </soap:Body> 
</soap:Envelope> 

ich Anfragen in Python bin mit und scheint alles mit ging gut zu sein:

import requests 

companyName = 'My Company' 
userName = 'My Username' 
password = 'My Password' 

url = 'https://bms.kaseya.com/WS/OpenAPI.asmx' 

body = ''' 
<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <Authenticate xmlns="https://bms.kaseya.com/"> 
     <companyName>{}</companyName> 
     <userName>{}</userName> 
     <password>{}</password> 
    </Authenticate> 
    </soap:Body> 
</soap:Envelope>'''.format(companyName,userName,password) 

headers = {'Host':'bms.kaseya.com', 
      'Content-Type':'text/xml; charset=utf-8', 
      'Content-Length':str(len(body)), 
      'SOAPAction':'"https://bms.kaseya.com/Authenticate"'} 

r = requests.post(url, data=body, headers=headers) 
print(r.text) 

Mit Ausnahme der Teil, wo ich bin immer:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Server did not recognize the value of HTTP Header SOAPAction: https://bms.kaseya.com/Authenticate.</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope> 

Von dem, was ich gefunden habe, scheint es, dass die uRL o f die SOAPAction ist falsch ??? Ich nehme buchstäblich ihr Beispiel und füge nur meine Live-Informationen ein, ich habe keine Ahnung, wo ich falsch gelaufen bin, ob es überhaupt ich bin.

Antwort

0

Nicht berücksichtigt, dass es behoben wurde. Mein Code ist in Ordnung, wie erwartet aufgrund schlechter Dokumentation von ihnen. Eine kleine Verbesserung einiger URLs und alles funktioniert wie erwartet!

stellte sich heraus, wir gehen mit SOAP 1.2 und das richtige Beispiel hätte sein sollen:

POST /WS/OpenAPI.asmx HTTP/1.1 
Host: bms.kaseya.com 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <Authenticate xmlns="https://vorexlogin.com/"> 
     <companyName>string</companyName> 
     <userName>string</userName> 
     <password>string</password> 
    </Authenticate> 
    </soap12:Body> 
</soap12:Envelope>