OVH Cloud OVH Cloud

module soappy

7 réponses
Avatar
mbana
bonsoir à tous,

j'utilise le module soappy pour dialoguer avec un serveur WebServices
(WS). Ce module fonctionne parfaitement ... sauf que le serveur WS
présente un particularité: il attend l'authentification dans les lignes
headers du dialogue http. Je précise que le traitement de
l'authentification est pris en charge par les services du WS , et non
par le serveur http derrière lequel sont invoqués les services en
question. J'ai résolu le problème en "patchant" temporairement les sources.

Question: Y a t il parmis vous qui aurait utilisé ce module ? merçi.

7 réponses

Avatar
m.banaouas
apparemment, c'est pas très passionnant comme question.
Est-ce parce qu'elle n'est pas bien posée ou bien parce que le sujet
(soap, wsdl, ...) n'est pas abordé par les participants de ce forum ?

merci
Avatar
Amaury Forgeot d'Arc
apparemment, c'est pas très passionnant comme question.
Est-ce parce qu'elle n'est pas bien posée ou bien parce que le sujet
(soap, wsdl, ...) n'est pas abordé par les participants de ce forum ?


Si si, c'est juste que je n'ai pas eu le temps récemment...
Sur ce forum, il faut quelquefois attendre quelques jours !

--
Amaury

Avatar
Olivier
Hello,

apparemment, c'est pas très passionnant comme question.


Juste histoire que tu te sentes moins seul ... ;o)
J'ai utilisé soappy il y a deux/trois ans pour faire un serveur de cache
de résultats de requêtes sql à l'usage d'une appli web qui ne gérait pas
de persistence.
Il n'y avait aucun besoin d'authentification, donc je ne peux pas
vraiment te faire partager mon expérience.

Est-ce parce qu'elle n'est pas bien posée ou bien parce que le sujet
(soap, wsdl, ...) n'est pas abordé par les participants de ce forum ?


J'ai effectivemment l'impression que ça intéresse peu les pythonistes,
qui sont très contents avec xmlrpc.


Olivier

Avatar
Amaury Forgeot d'Arc
bonsoir à tous,

j'utilise le module soappy pour dialoguer avec un serveur WebServices
(WS). Ce module fonctionne parfaitement ... sauf que le serveur WS
présente un particularité: il attend l'authentification dans les lignes
headers du dialogue http. Je précise que le traitement de
l'authentification est pris en charge par les services du WS , et non
par le serveur http derrière lequel sont invoqués les services en
question. J'ai résolu le problème en "patchant" temporairement les sources.

Question: Y a t il parmis vous qui aurait utilisé ce module ? merçi.


Juste une idée :
as-tu essayé avec une url de la forme :
http://user:/...

En regardant le code source de soappy, il semble que ça ajoute le header
suivant:
Authorisation = Basic <user:password encodé avec base64>

Est-ce cela qui est désiré ?

--
Amaury

Avatar
mbana
Ah! il y a du bruit , c'est bon signe...

plus sérieusement, je vais essayer de préciser le problème rencontré:
dans le processus de dialogue avec un WebService (WS) via le module
soappy, on peut distinguer deux phases majeures:
1- l'instanciation d'un objet proxy qui demande l'url du WS
2- l'invocation du service avec passage des arguments et récupération
des résultats en retour; dit de cette façon, cela semble très simple;
pourtant, pour avoir modestement exploré le wsdl, j'estime qu'il y a là
un très gros travail d'encapsulation fait par le module soappy pour en
arriver à cette apparente (et effective) simplicité.

mon problème se situe dans la phase d'authentification; en effet, je
transmet user:password dans l'url lors de l'obtention de l'objet proxy
du service. Mais j'ai constaté que ce user:password n'est pas retransmis
à chaque échange http correspondant à la phase 2. Du coup, il y a
échec d'authentification.

J'ai contacté les développeurs du service en question (soit dit en
passant, c'est sous apache/tomcat/axis et l'implémentation est en java)
qui m'ont confirmé que l'authentification n'est pas déléguée au serveur
web mais bien traitée par le service lui même. Mon patch temporaite a
consisté à "forcer" la retransmission du user:password dans les headers.
Cela se passe dans le source client.py, classe HTTPTransport, methode call.

Je pense que l'echec d'athentification vient du fait qu'il n'y a pas de
retransmission du user:password fourni au départ, comme si le module ne
le consignait nulle part et du coup il n'est pas trouvé par la suite.

J'ai même envoyé des mails aux mainteneurs du module mais c'est resté
sans réponse.

merci bien pour vos réponses.

bonsoir à tous,

j'utilise le module soappy pour dialoguer avec un serveur WebServices
(WS). Ce module fonctionne parfaitement ... sauf que le serveur WS
présente un particularité: il attend l'authentification dans les
lignes headers du dialogue http. Je précise que le traitement de
l'authentification est pris en charge par les services du WS , et non
par le serveur http derrière lequel sont invoqués les services en
question. J'ai résolu le problème en "patchant" temporairement les
sources.

Question: Y a t il parmis vous qui aurait utilisé ce module ? merçi.


Juste une idée :
as-tu essayé avec une url de la forme :
http://user:/...

En regardant le code source de soappy, il semble que ça ajoute le header
suivant:
Authorisation = Basic <user:password encodé avec base64>

Est-ce cela qui est désiré ?




Avatar
Amaury Forgeot d'Arc

Mon patch temporaite a
consisté à "forcer" la retransmission du user:password dans les headers.
Cela se passe dans le source client.py, classe HTTPTransport, methode call.

Je pense que l'echec d'athentification vient du fait qu'il n'y a pas de
retransmission du user:password fourni au départ, comme si le module ne
le consignait nulle part et du coup il n'est pas trouvé par la suite.



Justement dans ce source client.py, classe HTTPTransport, methode call,
as-tu regardé la valeur de addr.user ? Il me semble que c'est là que
l'authentification doit être enregistrée.
Et si la valeur reste vide, essaie de tracer les appels à SOAPAddress(),
pour voir les adresses qui sont passées.

--
Amaury

Avatar
mbana
réponse: vide!
c'est exactement là où le bat blesse!
par défaut, les appels ne comportent pas d'authentification. Même en
tracant le dialogue http, pas de trace (...) d'authentification (la
fameuse ligne Autorization: ...).
pour que ça fonctionne, j'ai dû "réinjecter" le user:password. Et ca
fonctionne très bien depuis.
mais je pense tout de même qu'il doit y avoir une facon plus "propre"
pour y arriver.


Mon patch temporaite a consisté à "forcer" la retransmission du
user:password dans les headers. Cela se passe dans le source
client.py, classe HTTPTransport, methode call.

Je pense que l'echec d'athentification vient du fait qu'il n'y a pas
de retransmission du user:password fourni au départ, comme si le
module ne le consignait nulle part et du coup il n'est pas trouvé par
la suite.



Justement dans ce source client.py, classe HTTPTransport, methode call,
as-tu regardé la valeur de addr.user ? Il me semble que c'est là que
l'authentification doit être enregistrée.
Et si la valeur reste vide, essaie de tracer les appels à SOAPAddress(),
pour voir les adresses qui sont passées.