Ich möchte einen WSDL SOAP-basierten Webdienst in Python verwenden. Ich habe mir den Dive Into Python- Code angesehen, aber das SOAPpy-Modul funktioniert unter Python 2.5 nicht.
Ich habe versucht, Schaum zu verwenden, der teilweise funktioniert, aber mit bestimmten Typen bricht (suds.TypeNotFound: Typ nicht gefunden: 'item').
Ich habe mir auch Client angesehen, aber dies scheint WSDL nicht zu unterstützen.
Ich habe mir ZSI angesehen, aber es sieht sehr komplex aus. Hat jemand einen Beispielcode dafür?
Die WSDL lautet https://ws.pingdom.com/soap/PingdomAPI.wsdl und funktioniert problemlos mit dem PHP 5 SOAP-Client.
python
web-services
soap
Davidmytton
quelle
quelle
Antworten:
Ich würde empfehlen, dass Sie sich SUDS ansehen
"Suds ist ein leichter SOAP-Python-Client für die Nutzung von Webdiensten."
quelle
Es gibt eine relativ neue Bibliothek, die sehr vielversprechend ist und, obwohl sie noch schlecht dokumentiert ist, sehr sauber und pythonisch erscheint: Python Zeep .
Siehe auch diese Antwort für ein Beispiel.
quelle
Ich bin kürzlich auf das gleiche Problem gestoßen. Hier ist die Zusammenfassung meiner Lösung:
Grundlegende Codeblöcke werden benötigt
Im Folgenden sind die erforderlichen grundlegenden Codeblöcke Ihrer Clientanwendung aufgeführt
Welche Module benötigen Sie?
Viele schlugen vor, Python-Module wie urllib2 zu verwenden. Keines der Module funktioniert jedoch - zumindest für dieses spezielle Projekt.
Hier ist die Liste der Module, die Sie benötigen. Zunächst müssen Sie die neueste Version von Schaum über den folgenden Link herunterladen und installieren:
Darüber hinaus müssen Sie Anforderungs- und suds_requests-Module von den folgenden Links herunterladen und installieren (Haftungsausschluss: Ich bin neu hier, daher kann ich vorerst nicht mehr als einen Link veröffentlichen).
Sobald Sie diese Module erfolgreich heruntergeladen und installiert haben, können Sie loslegen.
Der Code
Nach den zuvor beschriebenen Schritten sieht der Code folgendermaßen aus: Importe:
Sitzungsanforderung und Authentifizierung:
Erstellen Sie den Client:
WS-Sicherheitskopf hinzufügen:
Bitte beachten Sie, dass diese Methode den in Abb.1 dargestellten Sicherheitsheader erstellt. Daher kann Ihre Implementierung abhängig vom richtigen Sicherheitsheaderformat variieren, das vom Eigentümer des von Ihnen genutzten Dienstes bereitgestellt wird.
Verbrauchen Sie die relevante Methode (oder Operation):
Protokollierung :
Eine der besten Methoden bei solchen Implementierungen wie dieser ist die Protokollierung, um zu sehen, wie die Kommunikation ausgeführt wird. Falls es ein Problem gibt, erleichtert es das Debuggen. Der folgende Code führt die grundlegende Protokollierung durch. Sie können jedoch zusätzlich zu den im Code dargestellten Aspekten viele Aspekte der Kommunikation protokollieren.
Ergebnis:
Hier ist das Ergebnis in meinem Fall. Beachten Sie, dass der Server HTTP 200 zurückgegeben hat. Dies ist der Standard-Erfolgscode für die HTTP-Anforderungsantwort.
quelle
suds_request
während der Installation fehlschlägt. Wenn Sie also einesuds-jurko
Gabel verwenden, können Sie diese installieren,suds_request
die für die Verwendung mit Jurkos Version von Schaum angepasst wurde:pip install git+https://github.com/chrcoe/suds_requests.git@feature/python3_suds_jurko
Derzeit (Stand 2008) saugen alle für Python verfügbaren SOAP-Bibliotheken. Ich empfehle, SOAP nach Möglichkeit zu vermeiden. Als wir das letzte Mal gezwungen waren, einen SOAP-Webdienst von Python zu verwenden, haben wir einen Crapper in C # geschrieben, der die SOAP auf der einen Seite handhabte und COM auf der anderen Seite aussprach.
quelle
Zeep ist eine anständige SOAP-Bibliothek für Python, die Ihren Anforderungen entspricht: http://docs.python-zeep.org
quelle
Ich suche regelmäßig nach einer zufriedenstellenden Antwort darauf, aber bisher kein Glück. Ich benutze soapUI + Anfragen + Handarbeit.
Ich gab auf und verwenden Java das letzte Mal , dass ich brauchte , dies zu tun, und gab nur ein paar Mal das letzte Mal , bis ich wollte , dies zu tun, aber es war nicht wesentlich.
Nachdem ich die Anforderungsbibliothek letztes Jahr erfolgreich mit der RESTful-API von Project Place verwendet hatte, kam mir der Gedanke, dass ich die SOAP-Anforderungen, die ich auf ähnliche Weise senden möchte, möglicherweise einfach per Hand rollen könnte.
Es stellt sich heraus, dass dies nicht allzu schwierig ist, aber es ist zeitaufwändig und fehleranfällig, insbesondere wenn Felder inkonsistent benannt sind (das Feld, an dem ich heute arbeite, hat 'jobId', JobId 'und' JobID '. Ich verwende soapUI zum Laden die WSDL, um das Extrahieren von Endpunkten usw. und das Durchführen manueller Tests zu vereinfachen. Bisher hatte ich das Glück, nicht von Änderungen an einer von mir verwendeten WSDL betroffen zu sein.
quelle
Es ist nicht wahr, dass SOAPpy nicht mit Python 2.5 funktioniert - es funktioniert, obwohl es sehr einfach und wirklich sehr, sehr einfach ist. Wenn Sie mit einem komplizierteren Webservice sprechen möchten, ist ZSI Ihr einziger Freund.
Die wirklich nützliche Demo, die ich gefunden habe, ist unter http://www.ebi.ac.uk/Tools/webservices/tutorials/python zu finden - dies hat mir wirklich geholfen zu verstehen, wie ZSI funktioniert.
quelle
Wenn Sie Ihre eigenen rollen, würde ich Ihnen dringend empfehlen, sich http://effbot.org/zone/element-soap.htm anzusehen .
quelle
SOAPpy ist jetzt veraltet, AFAIK, ersetzt durch ZSL. Es ist ein strittiger Punkt, weil ich weder Python 2.5 noch Python 2.6 zum Laufen bringen kann, geschweige denn kompilieren kann
quelle
quelle