我想用 suds 或 soap.py 替换应用程序当前的(严重破坏和粗糙)基于 cURL(基于 cURL命令行!)的 SOAP 客户端。麻烦的是,我们必须联系 MS CRM 服务,因此必须使用 NTLM。由于各种原因,NTLM 代理使用起来有点麻烦,所以我正在研究python-ntlm来提供这种支持。
可以使 suds 或 soap.py 使用这种身份验证方法吗?如果是这样,怎么做?如果没有,任何其他建议都会很棒。
编辑
如下所述,suds 已经支持 python-ntlm 开箱即用。
从 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)
另一种方法是在肥皂异常期间调用您的 curl 命令,然后启动重试。
就像是...
curl -x websenseproxy:8080 --ntlm -U domain\user:password --insecure https://blah.com/prod/webservice.asmx?WSDL
#insecure
用于自签名证书
您可以将 CNTLM 用作处理所有 NTLM 身份验证调用的本地代理服务。然后,您只需引用本地 CNTLM 代理 IP 和端口,而无需使用 soapy 或 urllib2 进行身份验证......无论什么。
我还没有找到一个可以很好地处理复杂代理的 python 库。