我正在尝试制作一个可以使用.NET(soap)web服务的Python客户机。我一直在研究suds库来实现这一点,因为它似乎经常被推荐。到目前为止,我得到的是:
from suds.client import Client
from suds.transport.https import WindowsHttpAuthenticated
ntlm_transport = WindowsHttpAuthenticated(username='myUserName', password='myPassword')
client = Client('http://server:port/path?wsdl', transport=ntlm_transport)
some_complex_type = client.factory.create('SomeComplexType')
# HOW DO I SET PROPERTIES OF some_complex_type IF THE WSDL DOESN'T DEFINE WHAT IT LOOKS LIKE?
return_value = client.service.MethodThatUsesSomeComplexType(some_complex_type)
从suds documentation for Complex Arguments来看,通常如果print client.factory.create('SomeComplexType')
它将输出复杂类型具有的属性(根据wsdl)。但是,在我的例子中,如果我这样做了:print some_complex_type
,那么我得到的是“<;empty>;”,这可能意味着wsdl缺少SomeComplexType
的定义(除了声明它存在之外)。在
我正在使用的web服务的创建者是否只是设置不正确?或者微软在wsdl中定义类型是否有一种特殊/不同的方式,而我只需要对我的suds客户端进行不同的配置?在
我发现,在使用suds库时,如上面的示例所示,如果wsdl中缺少复杂类型定义,则可以发送一个python字典,其中包含远程服务最终需要的值,代替复杂类型的。在
例如,使用以下示例代替:
您只需执行以下操作:
^{pr2}$some_complex_类型的字典还可以包含其他字典的子字典和子列表等。字典树的形式应该与web服务最终希望接收的XML格式相匹配。在
相关问题 更多 >
编程相关推荐