如何让Suds在使用NTLM认证后为Lists.asmx运行代理?WSDL?

1 投票
1 回答
726 浏览
提问于 2025-04-16 19:32

我正在尝试使用Python的suds库通过一个服务访问SharePoint列表,但在客户端组件上遇到了一些困难。首先,我在公司防火墙后面,这意味着当NTLM认证成功后,suds会获取Lists.asmx?WSDL包,然后它会尝试连接互联网去获取Schema,但这失败了。
所以,我想寻求一些关于代理的帮助。我尝试使用Client.set_options( proxy = d ),其中d是一个字典,但Suds却报错了,提示如下:

Client.set_options( proxy = d )
TypeError: unbound method set_options() must be called with Client instance
   as first argument (got nothing instead)

有什么想法吗?

1 个回答

1

编辑:我找到了一种解决这个问题的方法,可能对提问者有帮助,也确实在我遇到类似情况时帮了我。

这个方法是把 XMLSchema.xml 文件缓存到本地(具体可以参考这里:在没有网络的情况下使用 suds 和 soaplib)。

import os.path
from suds.xsd import sxbasic
sxbasic.Import.bind('http://www.w3.org/2001/XMLSchema',
'file://' + os.path.join(ROOT_DIR, 'cache', 'suds', 'XMLSchema.xml'))

然后把 XMLSchema.xml 的本地副本保存到 ROOT_DIR/cache/suds/ 这个路径下。

理想的解决方案是为 suds 设置 NTLM 认证和一个代理,但我还没弄明白怎么做……

撰写回答