2017-09-11 1 views
0

Ich versuche, ZEEP verwenden, um SOAP-Anfragen zu tun.fehlt WSDL: Service-Definitionen in der WSDL

bekam ich diese Anfrage:

def status(request, IP): 
    URL = "http://" + IP + "/Service" 
    session = Session() 
    session.auth = HTTPBasicAuth('username', 'password') 
    client = Client(URL, 
        transport=Transport(session=session), strict=False) 

    response = client.service.Method1(request={'getList'}) 

    return response 

Aber Ich schlage den Fehler Wsdl fehlt: in der WSDL-Service-Definitionen.

Ich bin fest und kann nicht mehr Weg zur Fehlersuche finden. Hast du irgendwelche Ideen?

Edit für den Kontext. Dies ist eine hartcodierte Anfrage, das funktioniert, und ich versuche mit zeep zu tun:

def GetList(session, IP):   

     request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">' 
     request = request + '<soapenv:Header>' 
     request = request + '<session>' + session + '</session>' 
     request = request + ' </soapenv:Header>' 
     request = request + ' <soapenv:Body>' 
     request = request + '<getList/>' 
     request = request + '</soapenv:Body>' 
     request = request + '</soapenv:Envelope>' 

     request = u"""""" + request + """""".format() 

     encoded_request = request.encode('utf-8') 

     headers = {"Host": ""+ IP +"", 
        "Content-Type": "text/xml; charset=UTF-8", 
        "Content-Length": str(len(encoded_request)), 
        "SOAPAction": ""} 

     response = requests.post(url="http://"+ url +"/Service", 
           headers=headers, 
           data=encoded_request, 
           verify=False) 

     return response.content 

bearbeiten 2. Fügen Sie die WSDL-Datei

<?xml version="1.0" encoding="UTF-8"?>  
-<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:intf="http://xml.apache.org/axis/wsdd/ " xmlns:impl="http://xml.apache.org/axis/wsdd/ " xmlns:apachesoap="http://xml.apache.org/xml-soap" targetNamespace="http://xml.apache.org/axis/wsdd/ ">  
-<wsdl:types>  
-<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.apache.org/axis/wsdd/ ">  
<element type="xsd:anyType" name="parseMessage"/>  
<element type="xsd:anyType" name="parseMessageReturn"/>  
</schema>  
</wsdl:types>  
-<message name="parseMessageResponse">  
<part name="parseMessageReturn" element="impl:parseMessageReturn"/>  
</message>  
-<message name="parseMessageRequest">  
<part name="part" element="impl:parseMessage"/>  
</message>  
-<portType name="MessageHandlerProxy">  
-<operation name="parseMessage">  
<input name="parseMessageRequest" message="impl:parseMessageRequest"/>  
<output name="parseMessageResponse" message="impl:parseMessageResponse"/>  
</operation>  
</portType>  
-<binding type="impl:HandlerProxy" name="ServiceBinding">  
<wsdlsoap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>  
-<operation name="parseMessage">  
<wsdlsoap:operation soapAction=""/>  
-<input name="parseMessageRequest">  
<wsdlsoap:body use="literal" namespace="http://xml.apache.org/axis/wsdd/ "/>  
</input>  
-<output name="parseMessageResponse">  
<wsdlsoap:body use="literal" namespace="http://xml.apache.org/axis/wsdd/ "/>  
</output>  
</operation>  
</binding>  
-<service name="ProxyService">  
-<port name="Service" binding="impl:ServiceBinding">  
<wsdlsoap:address location="http://ip.ip.ip.ip/Service"/>  
</port>  
</service>  
</definitions> 
+0

Können Sie bestätigen, dass die richtige URL übergeben werden? Hast du diese URL mit einem SOAP-Client getestet und funktioniert? Es sollte im Format "http: // some_IP_here/Service? Wsdl'' – Galil

+0

@Galil Ich kann die URL ich Explorer öffnen, aber nicht Chrome. Chrome gibt einen Fehler aus: _error in Zeile 2 in Spalte 207: xmlns: impl: 'http://xml.apache.org/axis/wsdd/' ist kein gültiger URI_ Und ich führe: 'python -mzeep URL? wsdl' Erhalte den gleichen Fehler wie bei chrome: _zeep.exceptions.XMLSyntaxError: Ungültiger XML-Inhalt empfangen (xmlns: impl: 'http://xml.apache.org/axis/wsdd/' ist kein gültiger URI, Zeile 2, Spalte 207) _ Aber ich bekomme keinen Fehler, wenn ich 'python -mzeep --no-strict URL ausführen? Wsdl' – sumpen

+0

hast du ''? Wsdl'' an der URL-Variable hinzugefügt? Wie: '' URL = "http: //" + IP + "/ Dienst? Wsdl" ''. Hast du deine Funktion erneut getestet? – Galil

Antwort

0

Sie haben die ?wsdl am Ende Ihrer URL-Variable hinzufügen .

Auch die Art, wie Sie den Anruf tätigen, ist nicht korrekt. Ein Anruf an getList sollte wie folgt aussehen:

def status(request, IP): 
    URL = "http://" + IP + "/Service?wsdl" 
    session = Session() 
    session.auth = HTTPBasicAuth('username', 'password') 
    client = Client(URL, 
        transport=Transport(session=session), strict=False) 

    response = client.service.getList([add the arguments here]) 

    return response 
+0

Dies führt mir den Fehler: AttributeError _Service hat keine Operation' getList'_ Es sagt auch dies: _Während der Behandlung der oben genannten Ausnahme (Keine solche Operation 'getList' auf {http://xml.apache.org/axis/wsdd/} MessageServiceBinding), eine weitere Ausnahme ist aufgetreten: _ Das ist seltsam, da es nicht _http: //xml.apache sein soll. org/axis/wsdd/_ – sumpen

+0

Der Fehler, den Sie bekommen, bedeutet, dass es keinen solchen Anruf gibt. Gibt es einen Anruf '' getList''? Ist es richtig geschrieben? Ich habe den Aufruf "getList" als Beispiel verwendet. Sie sollten es durch den Namen des API-Aufrufs ersetzen, den Sie verwenden möchten. – Galil

+0

Ja, ich bin sicher, dass es stimmt. Ich habe die Frage mit etwas Kontext aktualisiert. Dies ist ein Beispiel für eine hartcodierte Anfrage, die funktioniert. Und Sie können sehen, dass die aufgerufen wird. So kann ich die Anfragen mit hartcodiertem Code erledigen. Aber nicht mit Zeep. Und ich kann nicht herausfinden, was ich falsch mache. Ich schätze wirklich all Ihre Hilfe, die Sie zur Verfügung stellen. – sumpen