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>
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
@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
hast du ''? Wsdl'' an der URL-Variable hinzugefügt? Wie: '' URL = "http: //" + IP + "/ Dienst? Wsdl" ''. Hast du deine Funktion erneut getestet? – Galil