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'})
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