Клиент Python SOAP, вызов WSDL с suds выдает ошибку транспорта 401 «Неавторизовано для базовой аутентификации HTTP»

Фон

Я создаю клиент SOAP с python 2.7.3 и использую библиотеку suds 0.4.1, предоставленную Canonical. Сервер использует базовую аутентификацию через HTTPS.

Задача

Не удается пройти аутентификацию на сервере, даже для доступа к WSDL. Я получаю следующую ошибку:

suds.transport.TransportError: HTTP Error 401: Unauthorized

Попытки разрешения и кода

Я испробовал оба метода аутентификации, описанные в документации suds , но все равно получаю указанную выше ошибку в строке client = Client(url,...). Я подтвердил учетные данные и возможность подключения в веб-браузере, который работает нормально.

После объявления wsdl_url, usernameи passwordя попытался:

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)

Последний, по крайней мере, получает ответ от URL-адреса WSDL в другом вопросе об аутентификации HTTP с помощью suds .

Другие примечания

Этот вопрос отличается от этого аналогичного вопроса , потому что я использую:

from suds.transport.https import HttpAuthenticated
# not:
# from suds.transport.http import HttpAuthenticated

а из Traceback вызов client = Client(url,...)явно попадает на 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)

Что мне не хватает?

9
задан Community 23 May 2017 в 12:00
поделиться