Я пытаюсь использовать SUDS и застреваю, пытаясь выяснить, почему я не могу заставить аутентификацию работать (или https).
Служба, к которой я пытаюсь получить доступ, работает по протоколу https с базовой дайджест-проверкой подлинности. Судя по отладкам, он использует http вместо https. Но не совсем уверен, что мне не хватает. Любая подсказка приветствуется.
from suds.client import Client
from suds.transport.http import HttpAuthenticated
import logging
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)
def main():
url = 'https://blah.com/soap/sp/Services?wsdl'
credentials = dict(username='xxxx', password='xxxx')
t = HttpAuthenticated(**credentials)
client = Client(url, location='https://blah.com/soap/sp/Services', transport=t)
print client.last_sent()
if __name__=="__main__":
main()
Вывод отладки:
DEBUG: suds.wsdl: чтение wsdl по адресу: https://blah.com/soap/sp/Services?wsdl ...
ОТЛАДКА: suds.transport.http: открытие (https://blah.com/soap/sp/Services?wsdl)
Снип ...
Файл "C: \ Python27 \ Lib \ site-packages \ suds-0.4-py2.7 \ suds \ reader.py", строка 95, в загрузке
fp = self.options.transport.open (Запрос (url))
Файл "C: \ Python27 \ Lib \ site-packages \ suds-0.4-py2.7 \ suds \ transport \ http.py", строка 173, в открытом виде
return HttpTransport.open (самостоятельно, запрос)
Файл "C: \ Python27 \ Lib \ site-packages \ suds-0.4-py2.7 \ suds \ transport \ http.py", строка 64, в открытом виде
поднять TransportError (str (e), e.code, e.fp)
suds.transport.TransportError: Ошибка HTTP 401: требуется авторизация