Welche SOAP-Client-Bibliotheken gibt es für Python und wo ist die Dokumentation für sie? [geschlossen]


333

Ich habe noch nie SOAP verwendet und bin ein bisschen neu in Python. Ich mache das, um mich mit beiden Technologien vertraut zu machen. Ich habe SOAPlib installiert und versucht, die Client- Dokumentation zu lesen , aber ich verstehe es nicht so gut. Gibt es noch etwas, das ich untersuchen kann und das besser als SOAP-Client-Bibliothek für Python geeignet ist?

Bearbeiten: Nur für den Fall, dass es hilft, verwende ich Python 2.6.


1
Ist es hat als mit bereits bestehenden Web - Service SOAP, so sein? Pythons xmlrpclib ist denkbar einfach zu bedienen und ich habe unsere SOAP-Services damit auf XMLRPC migriert.
Kirk Strauser

26
Manchmal möchte man nur eine Verbindung zu einem Dienst herstellen, der NUR über SOAP bereitgestellt wird. Ja, eine gute Python-SOAP-Bibliothek wird früher oder später benötigt. Man wird keine Chance haben, den Dienstanbieter davon zu überzeugen, SOAP durch etwas "
Saubereres

34
Kann jemand ein Update für 2011 bereitstellen? Anscheinend kann niemand diese Frage jemals wieder stellen.
Marcin


5
Jeder, der diese Frage besucht, stimmt ab, um sie erneut zu öffnen, damit die Informationen aktuell bleiben. Neue Antworten können veröffentlicht werden.
ocodo

Antworten:


388

Update (2016):

Wenn Sie nur einen SOAP-Client benötigen, gibt es eine gut gepflegte Bibliothek namens zeep . Es unterstützt sowohl Python 2 als auch 3 :)


Aktualisieren:

Zusätzlich zu den oben genannten Informationen verweise ich auf die Python WebServices- Seite, die immer auf dem neuesten Stand ist und alle aktiv gewarteten und empfohlenen Module für SOAP und alle anderen Webservice-Typen enthält.


Leider glaube ich im Moment nicht, dass es eine "beste" Python-SOAP-Bibliothek gibt. Jeder der verfügbaren Mainstreams hat seine eigenen Vor- und Nachteile.

Ältere Bibliotheken:

  • SOAPy : War das "Beste", wurde aber nicht mehr gepflegt. Funktioniert nicht mit Python 2.5+

  • ZSI : Sehr schmerzhaft zu bedienen und die Entwicklung ist langsam. Hat ein Modul namens "SOAPpy", das sich von SOAPy (oben) unterscheidet.

"Neuere" Bibliotheken:

  • SUDS : Sehr pythonisch und einfach zu erstellende WSDL-verbrauchende SOAP-Clients. Das Erstellen von SOAP-Servern ist etwas schwieriger. (Dieses Paket funktioniert nicht mit Python3. Für Python3 siehe SUDS-py3)

  • SUDS-py3 : Die Python3-Version von SUDS

  • spyne : Das Erstellen von Servern ist einfach und das Erstellen von Clients etwas schwieriger. Die Dokumentation fehlt etwas.

  • ladon : Das Erstellen von Servern ähnelt dem von soaplib (mit einem Dekorateur). Ladon stellt mehr Schnittstellen als SOAP gleichzeitig zur Verfügung, ohne dass zusätzlicher Benutzercode erforderlich ist.

  • pysimplesoap : sehr leicht, aber nützlich für Client und Server - enthält eine web2py-Serverintegration, die mit web2py geliefert wird.

  • SOAPpy : Anders als das verlassene SOAPpy, das über den obigen ZSI-Link gehostet wird, wurde diese Version tatsächlich bis 2011 beibehalten, jetzt scheint es auch aufgegeben zu werden.
  • soaplib : Einfach zu verwendende Python-Bibliothek zum Schreiben und Aufrufen von Seifen-Webdiensten. Mit soaplib geschriebene Webservices sind einfach, leichtgewichtig, funktionieren gut mit anderen SOAP-Implementierungen und können als WSGI-Anwendungen bereitgestellt werden.
  • osa : Eine schnelle / schlanke, einfach zu verwendende SOAP-Python-Client-Bibliothek.

Von den oben genannten habe ich SUDS nur persönlich verwendet, und es hat mir sehr gut gefallen.


2
SOAPy und SOAPpy sind eigentlich unterschiedlich. Ich habe zur Verdeutlichung bearbeitet und den Beitrag in ein Community-Wiki verwandelt.
Samat Jain

17
+1 für SUDS, tolle Bibliothek! Ich hatte Probleme bei der Verwendung von SUDS mit HTTPS-Webdiensten hinter einem Proxy. Es stellt sich heraus, dass es sich um ein bekanntes Python- urllib2Problem handelt. Siehe meine Antwort für weitere Details.
Sstock

4
Ich habe SUDs ausprobiert, aber beim Öffnen einer WSDL kam es zu einer Endlosschleife. dann warf Python einen Rekursionslimitfehler. Ich habe dieses offene Ticket zu diesem Problem gefunden: fedorahosted.org/suds/ticket/239 Anscheinend war dies vor 3 Jahren ein Fehler in der Bibliothek, der immer noch nicht behoben wurde.
Buttons840

11
Es gibt eine gepflegte Gabelung von SUDS unter bitbucket.org/jurko/suds
Sjaak Trekhaak

1
Ich habe heute begonnen, SUDS nur zum Abrufen von Daten zu verwenden. Es handhabte eine grundlegende Apikey-Authentifizierung in den Seifenköpfen ohne Probleme, und die Antworten waren ziemlich einfach zu analysieren. Die Dokumentation war auch ziemlich anständig.
Saccharin

47

Ich folgte dem Rat anderer Antworten auf diese Frage und versuchte es mit SUDS . Nachdem ich es "im Zorn" benutzt habe, muss ich zustimmen: SUDS ist sehr nett! Sehr empfehlenswert!

Ich hatte Probleme beim Aufrufen von HTTPS-basierten Webdiensten hinter einem Proxy. Zum Zeitpunkt dieses Schreibens betrifft dies alle verwendeten Python-Webdienst-Clients urllib2. Daher werde ich die Lösung hier dokumentieren.

Das urllib2Modul, das mit Python 2.6.2 und niedriger ausgeliefert wird, gibt kein CONNECTProxy für HTTPS-over-HTTP-Proxy-Sitzungen an den Proxy aus. Dies führt zu einer langen Zeitüberschreitung oder, wenn Sie Glück haben, zu einem Fehler, der wie folgt aussieht:

abort: error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Dies war das Problem 1424152 im Python-Bug-Tracker. Dem Fehlerbericht sind Patches beigefügt, die dies in Python 2.x und Python 3.x beheben. Das Problem ist bereits behoben .


Einfach installiert und obwohl ich völlig neu in Python bin, fühlte es sich sehr intuitiv an und ich konnte SUDS-Anfragen innerhalb von Minuten senden. Die Bibliothek ist großartig!
Leonid

1
Haben Sie etwas dagegen, dieses zu aktualisieren? Ich frage, weil ich auf den Link geklickt habe und der Fehler behoben ist.
Tshepang


Für uns funktioniert Schaum auch gut. Allerdings ist es sehr langsam. Das Abrufen einer XML-Seifendatei dauert 0,5 Sekunden und die Verarbeitung auf einem Dual-Core-Computer 5 Sekunden!
TjerkW

1
@ Paulm: versuchen Sie bitbucket.org/jurko/suds
Johndodo

19

Ich hatte gute Erfahrungen mit SUDS https://fedorahosted.org/suds

Verwendete ihre TestSuite als Dokumentation.


1
SUDS ist großartig! wirklich einfach zu bedienen, gute Dokumente, tolle Sachen!
Sander Versluys

1
Gepflegte, von Python3 unterstützte Gabel: suds-jurko . pip install suds-jurko
Laffuste

Ich versuche , async Seife api Anruf mit Schaum, gut arbeiten , aber nicht immer eine Antwort, kann jemand helfen, dass, hr meine F .: stackoverflow.com/questions/39227719/...
Vikram Singh Chandel

10

SUDS ist der richtige Weg, keine Frage.


5
Und es schlägt auch bei einer großen Anzahl von WSDL-Dateien fehl. Um diese Behauptung zu untermauern - die Bing-Maps-APIs zum Beispiel, einige davon schlagen fehl und Schaum kann sie nicht analysieren.

3
Ich fand, dass SUDS SSL-Endpunkte unterstützt.
Leonigmig


6

SUDS ist einfach zu bedienen, es wird jedoch nicht garantiert, dass es wieder eintritt. Wenn Sie das WSDL Client () -Objekt für eine bessere Leistung in einer Thread-App behalten, besteht ein gewisses Risiko. Die Lösung für dieses Risiko, die clone () -Methode, löst den nicht behebbaren Python 5508-Fehler aus, der zu drucken scheint, aber keine Ausnahme auslöst. Kann verwirrend sein, aber es funktioniert. Es ist immer noch der mit Abstand beste Python SOAP-Client.


4

Wir haben eine neue Bibliothek veröffentlicht: PySimpleSOAP , die Unterstützung für einfache und funktionale Clients / Server bietet. Die Ziele sind: Benutzerfreundlichkeit und Flexibilität (keine Klassen, automatisch generierter Code oder XML erforderlich), Introspektion und Generierung von WSDL, Einhaltung des WS-I-Standards, Kompatibilität (einschließlich Java AXIS, .NET und Jboss WS). Es ist in Web2Py enthalten, um Full-Stack-Lösungen zu ermöglichen (ergänzt andere unterstützte Protokolle wie XML_RPC, JSON, AMF-RPC usw.).

Wenn jemand SOAP lernt oder es untersuchen möchte, ist es meiner Meinung nach eine gute Wahl, damit zu beginnen.


2

Ich glaube, soaplib hat seinen SOAP-Client ("Absender") zugunsten von Schaum abgelehnt. An diesem Punkt konzentriert sich soaplib darauf, ein webframeworkunabhängiger SOAP-Server ("Empfänger") zu sein. Derzeit befindet sich soaplib in der aktiven Entwicklung und wird normalerweise in der Python SOAP-Mailingliste behandelt:

http://mail.python.org/mailman/listinfo/soap


2

In meiner Schlussfolgerung haben wir Folgendes:

Seife Client-Seite:

verwenden nur Suds-jurko (letzter Stand 2016) Schaum ist sehr gepflegt und aktualisiert.

UPDATE 06/2017: suds -jurko Bibliothek wird nicht aktualisiert und anscheinend aufgegeben ,

Ich habe die Zeep- Bibliothek getestet, habe aber Einschränkungen in Bezug auf Token. Inzwischen unterstütze ich nur noch UsernameToken. Ich melde einen Fehler beim Erstellen eines Zeitstempel-Tokens und aktualisiere den Code des Autors, um ihn zu beheben.

Zeep startet gut und hat eine gute Dokumentation , daher habe ich kürzlich meinen Code von Sud auf Zeep migriert und funktioniert einwandfrei.

Seifenserverseite:

Wir haben TGWS, soaplib (pysimplesoap nicht getestet) IMHO verwenden und helfen soaplib muss die Wahl sein.

Freundliche Grüße,


Gibt es gute Unterlagen / Muster für Suds-jurko? Im Repo gibt es einige .rst-Dateien, aber nicht viel zur Dokumentation der Verwendung der Bibliothek.
ierdna

1

Wie ich hier vorgeschlagen habe, empfehle ich Ihnen, Ihre eigenen zu rollen. Es ist eigentlich nicht so schwierig und ich vermute, das ist der Grund, warum es keine besseren Python-SOAP-Bibliotheken gibt.


1

Schaum ist ziemlich gut. Ich habe SOAPpy ausprobiert, aber es hat nicht so funktioniert, wie ich es brauchte, während Schaum ziemlich sofort funktioniert hat.




0

Ich benutze SOAPpy mit Python 2.5.3 in einer Produktionseinstellung.

Ich musste einige Dateien in SOAPpy manuell bearbeiten (etwas davon, dass sich der Header-Code an der falschen Stelle befindet), aber ansonsten hat es funktioniert und funktioniert weiterhin sehr zuverlässig.


1
Wir haben das gleiche getan und verwenden SOAPpy mit Python 2.6.3.
Joe L.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.