129 votes

Comment puis-je consommer un service web WSDL (SOAP) en Python ?

Je veux utiliser un service web basé sur WSDL SOAP en Python. J'ai regardé les Plongez dans Python mais le module SOAPpy ne fonctionne pas sous Python 2.5.

J'ai essayé d'utiliser mousses qui fonctionne en partie, mais s'interrompt avec certains types (suds.TypeNotFound : Type non trouvé : 'item').

J'ai également examiné Client mais elle ne semble pas prendre en charge WSDL.

Et j'ai regardé ZSI mais cela semble très complexe. Quelqu'un a-t-il un exemple de code pour cela ?

Le WSDL est https://ws.pingdom.com/soap/PingdomAPI.wsdl et fonctionne bien avec le client SOAP de PHP 5.

3 votes

Pourriez-vous envisager de modifier la réponse que vous avez acceptée ? La réponse actuellement acceptée est -1, et il y a une autre réponse avec +19. Je sais que cela date de 2008 ; je ne fais que suggérer.

0 votes

SUDS n'a pas fonctionné car il n'a pas pu analyser le WSDL correctement, mais ce serait un bon choix autrement. J'ai donc remplacé la réponse par un tutoriel de Dive Into Python qui propose des alternatives. Par ailleurs, Pingdom dispose désormais d'une API REST. pingdom.com/services/api-documentation-rest avec des bibliothèques clientes à blog.pingdom.com/2011/04/11/pingdom-rest-api-wrappers

49voto

Yusufk Points 574

Je vous recommande de jeter un coup d'œil à SUDS

"Suds est un client python SOAP léger pour consommer des services Web."

0 votes

Secondé. Suds m'a semblé immédiatement logique, pas de génération de classe, il charge le WSDL en direct et crée un objet que vous pouvez utiliser immédiatement à partir de celui-ci.

19 votes

Suds a un problème de récursion infinie lors de l'ouverture de WSDL avec des imports récursifs. Ceci est considéré comme un bug bloquant par Suds, et le problème a été créé il y a plus de 3 ans, mais il n'a pas encore été corrigé. fedorahosted.org/suds/ticket/239 Cela me fait me demander si Suds peut être utilisé en 2012 ?

2 votes

mousses semble mort. Longue vie SUDS - cela semble être la fourchette active.

42voto

Tony Points 871

Je sais qu'il s'agit d'un vieux fil de discussion mais il apparaissait en tête des résultats de Google. Je voulais donc partager une discussion plus actuelle sur Python et SOAP.

Voir : http://www.diveintopython.net/soap_web_services/index.html

7voto

Matthew Scouten Points 2518

À l'heure actuelle (depuis 2008), toutes les bibliothèques SOAP disponibles pour Python sont nulles. Je recommande d'éviter SOAP si possible. La dernière fois que nous avons été obligés d'utiliser un service web SOAP à partir de Python, nous avons écrit un wrapper en C# qui gérait le SOAP d'un côté et parlait COM de l'autre.

16 votes

Cela ressemble à une façon follement compliquée d'utiliser un protocole simple basé sur xml et http.

1 votes

À l'époque, en 2008, c'était la méthode qui craignait le moins pour nos besoins. Je crois me souvenir que ce service web particulier était extrêmement pointilleux sur un point que toutes les bibliothèques python ne comprenaient pas.

1 votes

2019, python zeep, suds, toujours sujet à de nombreux problèmes d'incompatibilité d'analyse syntaxique. Des documents wsdl mal maintenus feront que ces modules lanceront des exceptions comme des pétards non-stop.

6voto

Hywel Thomas Points 21

Je cherche périodiquement une réponse satisfaisante à cette question, mais sans succès jusqu'à présent. J'utilise soapUI + requêtes + travail manuel.

J'ai abandonné et utilisé Java la dernière fois que j'ai nécessaire de faire cela, et j'ai simplement abandonné plusieurs fois la dernière fois que j'ai recherché pour le faire, mais ce n'était pas essentiel.

Après avoir utilisé avec succès la bibliothèque de requêtes l'année dernière avec l'API RESTful de Project Place, il m'est venu à l'esprit que je pourrais peut-être faire tourner à la main les requêtes SOAP que je veux envoyer d'une manière similaire.

Il s'avère que ce n'est pas trop difficile, mais est Cela prend du temps et est sujet à des erreurs, surtout si les champs sont nommés de manière incohérente (celui sur lequel je travaille aujourd'hui a "jobId", "JobId" et "JobID"). J'utilise soapUI pour charger le WSDL afin de faciliter l'extraction des points de terminaison, etc. et j'effectue quelques tests manuels. Jusqu'à présent, j'ai eu la chance de ne pas être affecté par les modifications apportées aux WSDL que j'utilise.

3voto

zgoda Points 8549

Ce n'est pas vrai que SOAPpy ne fonctionne pas avec Python 2.5 - il fonctionne, bien qu'il soit très simple et vraiment, vraiment basique. Si vous voulez parler à un service web plus compliqué, ZSI est votre seul ami.

La démo vraiment utile que j'ai trouvée se trouve à l'adresse suivante http://www.ebi.ac.uk/Tools/webservices/tutorials/python - Cela m'a vraiment aidé à comprendre le fonctionnement de ZSI.

1 votes

Python setup.py install donne des erreurs avec la dernière version. La dernière copie de développement peut fonctionner, mais c'est très difficile à faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X