Python client SOAP, WSDL appel avec de la mousse donne de Transport d'Erreur 401 non autorisé pour l'authentification HTTP de base
Fond
Je suis en train de construire un client SOAP avec python 2.7.3 et à l'aide de la mousse 0.4.1 bibliothèque fournie par Canonical. Le serveur utilise l'authentification de base sur le protocole HTTPS.
Problème
On ne peut pas passer l'authentification sur le serveur, même pour aller à l'WSDL. J'obtiens l'erreur suivante:
de la mousse.de transport.TransportError: Erreur HTTP 401: non autorisé
Tentatives de résolution et le code
J'ai essayé les deux méthodes d'authentification décrites dans le la mousse de la documentation, mais encore obtenir l'erreur ci-dessus à la client = Client(url, ...)
ligne. J'ai confirmé les pouvoirs et la capacité de se connecter à un navigateur web, qui fonctionne très bien.
Après la déclaration d' wsdl_url
, username
et password
, j'ai essayé:
client = Client(url=wsdl_url, username=username, password=password)
# as well as:
t = HttpAuthenticated(username=username, password=password)
client = Client(url=wsdl_url, transport=t)
# and even:
t = HttpAuthenticated(username=username, password=password)
t.handler = urllib2.HTTPBasicAuthHandler(t.pm)
t.urlopener = urllib2.build_opener(t.handler)
client = Client(url=wsdl_url, transport=t)
Ce dernier semble, au moins, d'obtenir une réponse à partir de l'URL du WSDL dans une autre question à propos de l'authentification HTTP avec de la mousse.
Autres notes
Cette question est distincte de ce question similaire parce que je suis en utilisant:
from suds.transport.https import HttpAuthenticated
# not:
# from suds.transport.http import HttpAuthenticated
et de la traçabilité en amont, la client = Client(url, ...)
appel clairement hits suds.transport.https.py:
File "/usr/lib/python2.7/dist-packages/suds/client.py", line 112, in __init__ self.wsdl = reader.open(url)
File "/usr/lib/python2.7/dist-packages/suds/reader.py", line 152, in open d = self.fn(url, self.options)
File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 136, in __init__ d = reader.open(url)
File "/usr/lib/python2.7/dist-packages/suds/reader.py", line 79, in open d = self.download(url)
File "/usr/lib/python2.7/dist-packages/suds/reader.py", line 95, in download fp = self.options.transport.open(Request(url))
File "/usr/lib/python2.7/dist-packages/suds/transport/https.py", line 60, in open return HttpTransport.open(self, request)
File "/usr/lib/python2.7/dist-packages/suds/transport/http.py", line 64, in open raise TransportError(str(e), e.code, e.fp)
Ce qui me manque?
J'ai ajouté plus de la traçabilité en amont. La ligne précédente varient selon la version de la
client = Client(url=wsdl_url ...)
que j'utilise. J'étais convaincu que cela a dû être une erreur avec le nom d'utilisateur et le mot de passe, aussi, mais j'ai copier-collé directement depuis le fichier de configuration dans le navigateur (plusieurs fois!) à faire absolument sûr.
OriginalL'auteur Kenny Linsky | 2012-07-31
Vous devez vous connecter pour publier un commentaire.
la mousse n'était pas l'ajout de l'en-tête d'autorisation à la demande, alors je l'ai mis manuellement:
OriginalL'auteur Kenny Linsky
Vous pouvez utilisé SOAPpy
OriginalL'auteur Praney Mahajan