如何制作一个可以使用.NET(soap)web服务的Python客户机?

2024-09-27 21:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个可以使用.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客户端进行不同的配置?在


Tags: fromimportclientwebfactorytypesomesuds
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:15

我发现,在使用suds库时,如上面的示例所示,如果wsdl中缺少复杂类型定义,则可以发送一个python字典,其中包含远程服务最终需要的值,代替复杂类型的。在

例如,使用以下示例代替:

some_complex_type = client.factory.create('SomeComplexType')
some_complex_type.foo = 'Hello'  # borks is the definition of SomeComplexType is missing from the wsdl
some_complex_type.bar = 'World'
return_value = client.service.MethodThatUsesSomeComplexType(some_complex_type)

您只需执行以下操作:

^{pr2}$

some_complex_类型的字典还可以包含其他字典的子字典和子列表等。字典树的形式应该与web服务最终希望接收的XML格式相匹配。在

相关问题 更多 >

    热门问题