suds-py3 icon indicating copy to clipboard operation
suds-py3 copied to clipboard

401 error while connecting to EWS

Open sunilsunderrajdev opened this issue 6 years ago • 3 comments

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)

sunilsunderrajdev avatar Jan 30 '19 16:01 sunilsunderrajdev

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 avatar Mar 15 '19 00:03 cackharot

@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)

Dineshk77 avatar Feb 19 '20 09:02 Dineshk77

@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.

Dineshk77 avatar Feb 20 '20 05:02 Dineshk77