suds-py3
suds-py3 copied to clipboard
401 error while connecting to EWS
I am connecting to EWS, but I get 401 error urllib.error.HTTPError: HTTP Error 401: Anonymous Request Disallowed
Below is the code ssl._create_default_https_context = ssl._create_unverified_context logging.basicConfig(level=logging.INFO) logging.getLogger('suds.client').setLevel(logging.DEBUG) url = "https://xxx.xxx.xxx.com/EWS/Services.wsdl" username = 'DOMAIN\USER' password = 'PASS' ntlm = WindowsHttpAuthenticated(username=username,password=password) client = Client(url=url,transport=ntlm)
Can you go through this doc https://suds-py3.readthedocs.io/en/latest/#windows-ntlm
If you could share a simple NET WCF service with NTML auth enabled, i could test and fix if possible. Have a look at examples
folder and submit a pull request.
@cackharot I am having the same issue. Below is my code and logs
code:
from suds.client import Client
from suds.transport.https import WindowsHttpAuthenticated
ntlm = WindowsHttpAuthenticated(username="domain\\"+username,password=password)
client = Client(url,transport=ntlm)
error logs:
HTTP Error 401: Unauthorized
Traceback (most recent call last):
File "c:\Python3\lib\site-packages\suds\transport\http.py", line 63, in open
return self.u2open(u2request)
File "c:\Python3\lib\site-packages\suds\transport\http.py", line 119, in u2open
return url.open(u2request, timeout=tm)
File "c:\Python3\lib\urllib\request.py", line 532, in open
response = meth(req, response)
File "c:\Python3\lib\urllib\request.py", line 642, in http_response
'http', request, response, code, msg, hdrs)
File "c:\Python3\lib\urllib\request.py", line 570, in error
return self._call_chain(*args)
File "c:\Python3\lib\urllib\request.py", line 504, in _call_chain
result = func(*args)
File "c:\Python3\lib\urllib\request.py", line 650, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 401: Unauthorized
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Development\github\fdoc-buildscripts\pythonLibs\Symbols.py", line 51, in uploadCer
client = Client(self.cerServer["url"],transport=ntlm)
File "c:\Python3\lib\site-packages\suds\client.py", line 110, in __init__
self.wsdl = reader.open(url)
File "c:\Python3\lib\site-packages\suds\reader.py", line 151, in open
d = self.fn(url, self.options)
File "c:\Python3\lib\site-packages\suds\wsdl.py", line 135, in __init__
d = reader.open(url)
File "c:\Python3\lib\site-packages\suds\reader.py", line 78, in open
d = self.download(url)
File "c:\Python3\lib\site-packages\suds\reader.py", line 94, in download
fp = self.options.transport.open(Request(url))
File "c:\Python3\lib\site-packages\suds\transport\https.py", line 61, in open
return HttpTransport.open(self, request)
File "c:\Python3\lib\site-packages\suds\transport\http.py", line 65, in open
raise TransportError(str(e), e.code, e.fp)
suds.transport.TransportError: HTTP Error 401: Unauthorized
Note:
- same code works for python2.7 (suds==0.4 and python-ntlm==1.1.0)
- Fails in python3.6 (suds-py3==1.3.3.0 and python-ntlm3==1.0.2)
@cackharot seems the issue is with https://github.com/trustrachel/python-ntlm3. where the auth_header_value
supposed to be a list. The fixes are here in https://github.com/mullender/python-ntlm/blob/master/python30/ntlm/HTTPNtlmAuthHandler.py.