SUDS version 0.4 pn x86_64 Python 2.7
I'm having a bear of a time getting HTTP Basic Authentication to work for a SOAP request via suds. Also using an HTTP proxy server.
In WireShark I just see a request - GET http://...../services/services/JobService-0.0.1?wsdl HTTP/1.1 Accept-Encoding: identity Host: ....... Connection: close User-Agent: Python-urllib/2.7
This doesn't contain any authentication credentials so the response is HTTP/401, and the client doesn't retry with credentials. The response does come from the remote as I can see there is a WWW-Authenticate header and it is from an Apache Tomcat server - so it makes it through the proxy server.
Code ================ url = 'http://....../services/services/JobService-0.0.1?wsdl' proxy = urllib2.ProxyHandler({'http': 'http://.....:3128%27%7D) transport = suds.transport.http.HttpAuthenticated() transport.urlopener = urllib2.build_opener(proxy) client = suds.client.Client(url, transport=transport, username='******', password='********') ....
I've tried the above as well as the method described at http://blogs.oucs.ox.ac.uk/inapickle/2011/05/14/exchange-web-services-suds-and-python/ It has the same problem.
Back Trace ================ Traceback (most recent call last): File "etrace.py", line 30, in <module> client = suds.client.Client(url, transport=transport, username='*******', password='*****') File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/client.py", line 112, in __init__ self.wsdl = reader.open(url) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/reader.py", line 152, in open d = self.fn(url, self.options) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/wsdl.py", line 136, in __init__ d = reader.open(url) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/reader.py", line 79, in open d = self.download(url) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/reader.py", line 95, in download fp = self.options.transport.open(Request(url)) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/transport/http.py", line 173, in open return HttpTransport.open(self, request) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/transport/http.py", line 64, in open raise TransportError(str(e), e.code, e.fp) suds.transport.TransportError: HTTP Error 401: Unauthorized
Hi, my experience was that SUDS uses the username and password to authenticate when sending the actual request, but it seems that your service needs credentials for fetching the WSDL too. The simplest solution is to save the WSDL to a local file, so it can be loaded without credentials.
Regards, András Veres-Szentkirályi
2012. március 8. csütörtök 16:43:11 dátummal Adam Tauno Williams ezt írta:
SUDS version 0.4 pn x86_64 Python 2.7
I'm having a bear of a time getting HTTP Basic Authentication to work for a SOAP request via suds. Also using an HTTP proxy server.
In WireShark I just see a request - GET http://...../services/services/JobService-0.0.1?wsdl HTTP/1.1 Accept-Encoding: identity Host: ....... Connection: close User-Agent: Python-urllib/2.7
This doesn't contain any authentication credentials so the response is HTTP/401, and the client doesn't retry with credentials. The response does come from the remote as I can see there is a WWW-Authenticate header and it is from an Apache Tomcat server - so it makes it through the proxy server.
Code
url = 'http://....../services/services/JobService-0.0.1?wsdl' proxy = urllib2.ProxyHandler({'http': 'http://.....:3128%27%7D) transport = suds.transport.http.HttpAuthenticated() transport.urlopener = urllib2.build_opener(proxy) client = suds.client.Client(url, transport=transport, username='******', password='********') ....
I've tried the above as well as the method described at http://blogs.oucs.ox.ac.uk/inapickle/2011/05/14/exchange-web-services-suds -and-python/ It has the same problem.
Back Trace
Traceback (most recent call last): File "etrace.py", line 30, in <module> client = suds.client.Client(url, transport=transport, username='*******', password='*****') File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/client.py", line 112, in __init__ self.wsdl = reader.open(url) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/reader.py", line 152, in open d = self.fn(url, self.options) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/wsdl.py", line 136, in __init__ d = reader.open(url) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/reader.py", line 79, in open d = self.download(url) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/reader.py", line 95, in download fp = self.options.transport.open(Request(url)) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/transport/h ttp.py", line 173, in open return HttpTransport.open(self, request) File "/usr/local/lib/python2.7/site-packages/suds-0.4-py2.7.egg/suds/transport/h ttp.py", line 64, in open raise TransportError(str(e), e.code, e.fp) suds.transport.TransportError: HTTP Error 401: Unauthorized