有没有人将soap.py或suds与python-ntlm结合起来?

时间:2010-03-25 14:57:19

标签: python soap ntlm suds soappy

我想用suds或soap.py替换应用程序当前(严重破坏和狡猾)基于cURL(基于cURL 命令行!)的SOAP客户端。麻烦的是,我们必须联系MS CRM服务,因此必须使用NTLM。由于各种原因,NTLM代理使用起来有点痛苦,因此我正在考虑python-ntlm来提供支持。

可以使用suds或soap.py来使用此身份验证方法吗?如果是这样,怎么样?如果没有,任何其他建议都会很棒。

修改

如下所述,suds已经支持开箱即用的python-ntlm。

3 个答案:

答案 0 :(得分:6)

自0.3.8以来,Suds fixed支持它。

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

尝试使用here所述的以下代码段:

from suds.transport.https import WindowsHttpAuthenticated
ntlm = WindowsHttpAuthenticated(username='xx', password='xx')
client = Client(url, transport=ntlm)

答案 1 :(得分:1)

另一种方法是在soap例外期间调用curl命令,然后启动重试。

类似......

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

#insecure用于自签名证书

答案 2 :(得分:0)

您可以将CNTLM用作本地代理服务,该服务将处理所有NTLM身份验证调用。然后你只需引用本地CNTLM代理IP和端口,不使用soapy或urllib2进行身份验证......无论如何。

我还没有找到一个能很好地处理复杂代理的python库。