Кто-нибудь совмещал soap.py или suds с python-ntlm? - PullRequest
7 голосов
/ 25 марта 2010

Я хотел бы заменить текущий (плохо разоренный и хитрый) приложения SOAP-клиент на основе cURL (cURL из командной строки !) На suds или soap.py. Проблема в том, что мы должны связаться со службой MS CRM и, следовательно, должны использовать NTLM. По разным причинам использование NTLM-прокси немного затруднительно, поэтому я ищу python-ntlm , чтобы обеспечить такую ​​поддержку.

Можно ли использовать suds или soap.py для использования этого метода аутентификации? Если так, то как? Если нет, то любые другие предложения будут фантастическими.

Редактировать

Как отмечено ниже, suds уже поддерживает python-ntlm из коробки.

Ответы [ 3 ]

6 голосов
/ 25 марта 2010

Suds было исправлено для поддержки с 0.3.8.

Исходники python-suds-0.3.9 \ suds \ transport \ https.py говорят:

class WindowsHttpAuthenticated(HttpAuthenticated):
    """
    Provides Windows (NTLM) http authentication.
    @ivar pm: The password manager.
    @ivar handler: The authentication handler.
    """

    def u2handlers(self):
        # try to import ntlm support  
        try:
            from ntlm import HTTPNtlmAuthHandler
        except ImportError:
            raise Exception("Cannot import python-ntlm module")
        handlers = HttpTransport.u2handlers(self)
        handlers.append(HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(self.pm))
        return handlers

Попробуйте использовать следующий фрагмент, как описано здесь :

from suds.transport.https import WindowsHttpAuthenticated
ntlm = WindowsHttpAuthenticated(username='xx', password='xx')
client = Client(url, transport=ntlm)
1 голос
/ 23 августа 2012

Другим подходом было бы вызвать вашу команду curl во время исключений мыла и затем инициировать повторную попытку.

что-то вроде ...

curl -x websenseproxy:8080 --ntlm -U domain\user:password --insecure https://blah.com/prod/webservice.asmx?WSDL

#insecure используется для сертификатов с собственной подписью

0 голосов
/ 23 августа 2012

Вы можете использовать CNTLM в качестве локальной прокси-службы, которая будет обрабатывать все вызовы аутентификации NTLM. Затем вы просто ссылаетесь на локальный IP-адрес и порт прокси-сервера CNTLM без аутентификации, используя soapy или urllib2 ... что угодно.

Мне еще предстоит найти библиотеку python, которая хорошо справляется со сложными прокси.

...