[Python] Appels webservices SOAP
Fermé
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
-
31 août 2007 à 10:09
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 5 févr. 2008 à 13:09
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 5 févr. 2008 à 13:09
A voir également:
- [Python] Appels webservices SOAP
- Citizen code python avis - Accueil - Outils
- Appels masqués - Guide
- Ce programme est écrit en python ✓ - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
8 réponses
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
4 sept. 2007 à 12:01
4 sept. 2007 à 12:01
Je reviens sur ce que j'ai dit:
J'ai trouvé un client SOAP potable (qui ne gère pas le WSDL, mais qui gère les exception des webservices).
Il fait un boulot très potable, bien que la doc soit franchement succinte et éparpillée:
Il s'agit de elementsoap. (Un clent SOAP basé uniquement sur ElementTree, et qui fonctionne donc avec les libs standard de Python).
ça marche bien.
URL:
http://effbot.org/downloads/#elementsoap
Example:
J'ai trouvé un client SOAP potable (qui ne gère pas le WSDL, mais qui gère les exception des webservices).
Il fait un boulot très potable, bien que la doc soit franchement succinte et éparpillée:
Il s'agit de elementsoap. (Un clent SOAP basé uniquement sur ElementTree, et qui fonctionne donc avec les libs standard de Python).
ça marche bien.
URL:
http://effbot.org/downloads/#elementsoap
Example:
# delayed stock quote demo (www.xmethods.com) from elementsoap.ElementSOAP import * class QuoteService(SoapService): url = "http://66.28.98.121:9090/soap" def getQuote(self, symbol): action = "urn:xmethods-delayed-quotes#getQuote" request = SoapRequest("{urn:xmethods-delayed-quotes}getQuote") SoapElement(request, "symbol", "string", symbol) response = self.call(action, request) return float(response.findtext("Result")) q = QuoteService() print "MSFT", q.getQuote("MSFT") print "LNUX", q.getQuote("LNUX")
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
4 sept. 2007 à 10:39
4 sept. 2007 à 10:39
Bon... au final je me bricole mon propre client SOAP, en utilisant uniquement des librairies standard de Python (httplib et ElementTree).
Ça marche déjà: J'arrive à faire un appel.
(Il me reste encore les retours d'erreur à gérer, ainsi que le parsing de la réponse, mais ça ne pose aucun problème.)
Tant pis pour WSDL: pas de construiction automatique du proxy. J'implémenterai à la main les méthodes du webservice dont j'ai besoin (C'est pas la mort.)
Ça marche déjà: J'arrive à faire un appel.
(Il me reste encore les retours d'erreur à gérer, ainsi que le parsing de la réponse, mais ça ne pose aucun problème.)
Tant pis pour WSDL: pas de construiction automatique du proxy. J'implémenterai à la main les méthodes du webservice dont j'ai besoin (C'est pas la mort.)
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
4 sept. 2007 à 14:01
4 sept. 2007 à 14:01
J'ai résumé le tout là:
https://sebsauvage.net/python/snyppets/index.html#soap_clients
https://sebsauvage.net/python/snyppets/index.html#soap_clients
PROBLEME, il me semble, similaire... Voici un appel que j'ai fait avec soap UI:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:fet="http://prodomweb.univ-lyon1.fr/fetchProDom">
<soapenv:Header/>
<soapenv:Body>
<fet:runFetchDom>
<fet:ProdomAC>PD001000</fet:ProdomAC>
</fet:runFetchDom>
</soapenv:Body>
</soapenv:Envelope>
Mon but est de l'integrer dans un script Python mais SOAPpy refuse d'entendre raison (à moin que ce ne soit moi...)
Que dois-je faire à votre avis?
Merci d'avance....
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:fet="http://prodomweb.univ-lyon1.fr/fetchProDom">
<soapenv:Header/>
<soapenv:Body>
<fet:runFetchDom>
<fet:ProdomAC>PD001000</fet:ProdomAC>
</fet:runFetchDom>
</soapenv:Body>
</soapenv:Envelope>
Mon but est de l'integrer dans un script Python mais SOAPpy refuse d'entendre raison (à moin que ce ne soit moi...)
Que dois-je faire à votre avis?
Merci d'avance....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
3 janv. 2008 à 23:50
3 janv. 2008 à 23:50
J'ai eu des problèmes avec SOAPy. J'ai fini par utiliser ElementSoap.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
4 janv. 2008 à 11:32
4 janv. 2008 à 11:32
Lis le lien que j'ai donné: SOAPy et SOAP.py sont basés sur des librairies qui n'existent plus en Python 2.5.
Perso j'ai réussit à compiler SOAPpy sous windows pour python 2.5. Voici ce que j'ai fait :
Il nous faut mingw32 pour la compilation si nous ne voulons pas installer visual studio 2003. Le télécharger ici : https://sourceforge.net/projects/mingw/files/
1) installer fpconst :
- python setup.py install
2) compiler et installer pyXML :
- récupérer libpython25.a ici : http://mpan3.homeip.net/content/resources/libpython25.zip
ou le compiler comme expliqué ici : https://sebsauvage.net/python/mingw.html
et le placer dans python25\libs
- python setup.py build -c mingw32
- python setup.py install
il y a un message d'erreur à la fin de l'install, donc je me suis permis de copier le répertoire PyXML-0.8.4\build\lib.win32-2.5\_xmlplus vers mon installation python : python25\Lib
Comme il y a maintenant un module xml intégré à python 2.5, il faudra utiliser pyXml sous le nom de module _xmlplus.
3) compiler et installer SOAPpy :
- remonter au début de chaque fichier qui la contient la ligne suivante :
from __future__ import nested_scopes
Les fichiers concernés sont sous le répertoire SOAPpy : Client.py, Types.py, Server.py, GSIServer.py.
- python setup.py build
- python setup.py install
Il nous faut mingw32 pour la compilation si nous ne voulons pas installer visual studio 2003. Le télécharger ici : https://sourceforge.net/projects/mingw/files/
1) installer fpconst :
- python setup.py install
2) compiler et installer pyXML :
- récupérer libpython25.a ici : http://mpan3.homeip.net/content/resources/libpython25.zip
ou le compiler comme expliqué ici : https://sebsauvage.net/python/mingw.html
et le placer dans python25\libs
- python setup.py build -c mingw32
- python setup.py install
il y a un message d'erreur à la fin de l'install, donc je me suis permis de copier le répertoire PyXML-0.8.4\build\lib.win32-2.5\_xmlplus vers mon installation python : python25\Lib
Comme il y a maintenant un module xml intégré à python 2.5, il faudra utiliser pyXml sous le nom de module _xmlplus.
3) compiler et installer SOAPpy :
- remonter au début de chaque fichier qui la contient la ligne suivante :
from __future__ import nested_scopes
Les fichiers concernés sont sous le répertoire SOAPpy : Client.py, Types.py, Server.py, GSIServer.py.
- python setup.py build
- python setup.py install
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
5 févr. 2008 à 13:09
5 févr. 2008 à 13:09
Merci pour l'info !