J'essaie d'utiliser ZEEP pour faire des requêtes SOAP.missing wsdl: définitions de service dans le WSDL
J'ai eu cette demande:
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
Mais je suis frappé l'erreur manque wsdl: définitions de service dans le WSDL. Je suis bloqué et je ne trouve plus de moyen de rechercher les pannes. Vous avez des idées?
Modifier pour le contexte. Ceci est une demande hardcoded qui fonctionne et je suis en train de faire avec zeep:
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
Modifier 2. Ajouter le wsdl
<?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>
Pouvez-vous confirmer que passent la bonne URL? Avez-vous essayé cette URL avec un client SOAP et a bien fonctionné? Il devrait être au format '' http: // some_IP_here/Service? Wsdl'' – Galil
@Galil Je peux ouvrir l'URL de l'explorateur, mais pas Chrome. Chrome renvoie une erreur: _error sur la ligne 2 à la colonne 207: xmlns: impl: 'http://xml.apache.org/axis/wsdd/' n'est pas un URI_ valide Et je lance: 'python -mzeep URL? wsdl' Récupère la même erreur que chrome: _zeep.exceptions.XMLSyntaxError: Contenu XML non valide reçu (xmlns: impl: 'http://xml.apache.org/axis/wsdd/' n'est pas un URI valide, ligne 2, colonne 207) _ Mais je n'obtiens aucune erreur si j'exécute 'python -mzeep -no-strict URL? Wsdl' – sumpen
avez-vous ajouté' '? Wsdl'' à la variable URL? Comme: '' URL = "http: //" + IP + "/ Service? Wsdl" ''. Avez-vous testé votre fonction à nouveau? – Galil