7

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

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

编辑

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

4

3 回答 3

6

从 0.3.8 开始,Suds被修复以支持它。

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)
于 2010-03-25T15:08:18.997 回答
1

另一种方法是在肥皂异常期间调用您的 curl 命令,然后启动重试。

就像是...

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

#insecure用于自签名证书

于 2012-08-23T04:43:20.663 回答
0

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

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

于 2012-08-23T04:40:05.443 回答