Je souhaite utiliser un service Web basé sur WSDL SOAP en Python. J'ai regardé le code Dive Into Python mais le module SOAPpy ne fonctionne pas sous Python 2.5.
J'ai essayé d'utiliser de la mousse qui fonctionne en partie, mais qui rompt avec certains types (suds.TypeNotFound: Type not found: 'item').
J'ai également regardé Client mais cela 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 très bien avec le client PHP 5 SOAP.
python
web-services
soap
Davidmytton
la source
la source
Réponses:
Je vous recommande de jeter un œil à SUDS
"Suds est un client python SOAP léger pour la consommation de services Web."
la source
Il existe une bibliothèque relativement nouvelle, très prometteuse et encore mal documentée, qui semble très propre et pythonique: python zeep .
Voir également cette réponse pour un exemple.
la source
Je suis récemment tombé sur le même problème. Voici le synopsis de ma solution:
Blocs de code constitutifs de base nécessaires
Voici les blocs de code de base requis de votre application cliente
De quels modules avez-vous besoin?
Beaucoup ont suggéré d'utiliser des modules Python tels que urllib2; cependant, aucun des modules ne fonctionne, du moins pour ce projet particulier.
Alors, voici la liste des modules dont vous avez besoin. Tout d'abord, vous devez télécharger et installer la dernière version de suds à partir du lien suivant:
De plus, vous devez télécharger et installer respectivement les requêtes et les modules suds_requests à partir des liens suivants (avertissement: je suis nouveau pour publier ici, je ne peux donc pas publier plus d'un lien pour le moment).
Une fois que vous avez téléchargé et installé ces modules avec succès, vous êtes prêt à partir.
Le code
En suivant les étapes décrites précédemment, le code ressemble à ce qui suit: Importations:
Demande de session et authentification:
Créez le client:
Ajouter l'en-tête WS-Security:
Veuillez noter que cette méthode crée l'en-tête de sécurité représenté sur la figure 1. Ainsi, votre implémentation peut varier en fonction du format d'en-tête de sécurité correct fourni par le propriétaire du service que vous utilisez.
Consommez la méthode (ou l'opération) appropriée:
Journalisation :
L'une des meilleures pratiques dans des implémentations telles que celle-ci consiste à se connecter pour voir comment la communication est exécutée. En cas de problème, cela facilite le débogage. Le code suivant effectue la journalisation de base. Cependant, vous pouvez enregistrer de nombreux aspects de la communication en plus de ceux décrits dans le code.
Résultat:
Voici le résultat dans mon cas. Notez que le serveur a renvoyé HTTP 200. Il s'agit du code de réussite standard pour la requête-réponse HTTP.
la source
suds_request
cela échouera lors de l'installation, donc si vous utilisezsuds-jurko
fork, vous pouvez installersuds_request
ce qui a été adapté pour fonctionner avec la version jurko de suds:pip install git+https://github.com/chrcoe/suds_requests.git@feature/python3_suds_jurko
À l'heure actuelle (à partir de 2008), toutes les bibliothèques SOAP disponibles pour Python sont nulles. Je recommande d'éviter le savon si possible. La dernière fois que nous avons été obligés d'utiliser un service Web SOAP de Python, nous avons écrit un wrapper en C # qui gérait le SOAP d'un côté et parlait COM de l'autre.
la source
Zeep est une bibliothèque SOAP décente pour Python qui correspond à ce que vous demandez: http://docs.python-zeep.org
la source
Je recherche périodiquement une réponse satisfaisante à cela, mais pas de chance pour l'instant. J'utilise soapUI + demandes + travail manuel.
J'ai abandonné et utilisé Java la dernière fois que j'ai eu besoin de faire cela, et j'ai simplement abandonné quelques fois la dernière fois que je voulais 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 simplement gérer les requêtes SOAP que je souhaite envoyer de la même manière.
Il s'avère que ce n'est pas trop difficile, mais cela prend du temps et est sujet aux erreurs, surtout si les champs sont nommés de manière incohérente (celui sur lequel je travaille actuellement a 'jobId', JobId 'et' JobID '. J'utilise soapUI pour charger le WSDL pour faciliter l'extraction des points de terminaison, etc. et effectuer des tests manuels Jusqu'à présent, j'ai eu la chance de ne pas avoir été affecté par les modifications apportées à tout WSDL que j'utilise.
la source
Ce n'est pas vrai que SOAPpy ne fonctionne pas avec Python 2.5 - cela fonctionne, bien que ce soit très simple et vraiment très basique. Si vous souhaitez parler à un service Web plus complexe, ZSI est votre seul ami.
La démo vraiment utile que j'ai trouvée est à http://www.ebi.ac.uk/Tools/webservices/tutorials/python - cela m'a vraiment aidé à comprendre comment fonctionne ZSI.
la source
Si vous lancez le vôtre, je vous recommande vivement de consulter http://effbot.org/zone/element-soap.htm .
la source
SOAPpy est désormais obsolète, AFAIK, remplacé par ZSL. C'est un point discutable, car je ne peux pas faire fonctionner l'un ou l'autre, et encore moins compiler, sur Python 2.5 ou Python 2.6
la source
la source