[Python] Appels webservices SOAP
sebsauvage
Messages postés
33415
Statut
Modérateur
-
sebsauvage Messages postés 33415 Statut Modérateur -
sebsauvage Messages postés 33415 Statut Modérateur -
Hello.
Je cherche à faire des appels à un webservice (SOAP/WSDL) à partir de Python.
Je cherche donc quel module je pourrais utiliser.
Mais je ne sais pas quel module utiliser:
- SOAPy semblait populaire mais il n'est plus maintenu (dernière mise à jour: avril 2001)
- SOAP.py est mort également.
- ZSI semble être la référence, mais en l'installant je m'aperçoit qu'il dépend de pyXML qui n'est plus maintenu et n'existe pas pour Python 2.5 ! (dernière mise à jour: novembre 2004).
- soaplib a l'air potable, mais il dépend de cElementTree... et je n'ai pas de VisualStudio 2003 sous la main pour compiler cElementTree ("Visual Studio 2003 was not found on this system." lors de l'installation), donc impossible d'installer cElementTree et soaplib.
Je me retrouve donc sans client SOAP.
Quel module SOAP utiliseriez vous ?
Peut-être 4Suite ?
(Même s'il semble que les développeurs de 4Suite se soient débarassés de toute la partie SOAP ?)
:-(((
Je suis dans la mouise.
(à moins de tout bricoler moi-même, y compris les proxy)
Je cherche à faire des appels à un webservice (SOAP/WSDL) à partir de Python.
Je cherche donc quel module je pourrais utiliser.
Mais je ne sais pas quel module utiliser:
- SOAPy semblait populaire mais il n'est plus maintenu (dernière mise à jour: avril 2001)
- SOAP.py est mort également.
- ZSI semble être la référence, mais en l'installant je m'aperçoit qu'il dépend de pyXML qui n'est plus maintenu et n'existe pas pour Python 2.5 ! (dernière mise à jour: novembre 2004).
- soaplib a l'air potable, mais il dépend de cElementTree... et je n'ai pas de VisualStudio 2003 sous la main pour compiler cElementTree ("Visual Studio 2003 was not found on this system." lors de l'installation), donc impossible d'installer cElementTree et soaplib.
Je me retrouve donc sans client SOAP.
Quel module SOAP utiliseriez vous ?
Peut-être 4Suite ?
(Même s'il semble que les développeurs de 4Suite se soient débarassés de toute la partie SOAP ?)
:-(((
Je suis dans la mouise.
(à moins de tout bricoler moi-même, y compris les proxy)
A voir également:
- [Python] Appels webservices SOAP
- Citizen code python - Accueil - Outils
- Imo appels vidéo - Télécharger - Messagerie
- Appels masqués - Guide
- Mot secret python pix ✓ - Forum Python
- Programme python ✓ - Forum Python
8 réponses
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")
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.)
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
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