Python - Suds0.4 - SOAP主体复杂参数

0 投票
1 回答
756 浏览
提问于 2025-04-16 14:17

我正在尝试通过 SUDS0.4 将一个 Python 客户端连接到一个 SOAP 服务器。通常情况下,为了给 SOAP 函数提供一个复杂的参数,我会使用一个 Python 字典。举个例子,如果 SOAP 的参数看起来像这样:

<parameterDesignatorValuePair>
<parameterDesignator>Message</parameterDesignator>
<parameterValue>AAAABgBDAG8AdQBjAG8AdQ==</parameterValue>
</parameterDesignatorValuePair>

我的 Python 代码看起来像这样:

result = client.service.myfunction(parameterDesignatorValuePair={'parameterDesignator':val1,'parameterValue':val2})

现在我尝试连接到一个我没有编写的 SOAP 服务器,但我知道我的请求的 SOAP 内容应该是什么样子的,这些信息来自一个现有的 Java 客户端:(感兴趣的部分)

...
<parameterDesignatorValuePairSet>
<parameterDesignatorValuePair>
<parameterDesignator>Message</parameterDesignator>
<parameterValue>AAAABgBDAG8AdQBjAG8AdQ==</parameterValue>
</parameterDesignatorValuePair>
<parameterDesignatorValuePair>
<parameterDesignator>Sender</parameterDesignator>
<parameterValue>AAAABwBSAGUAbgBhAHUAbABk</parameterValue>
</parameterDesignatorValuePair>
</parameterDesignatorValuePairSet>
...

所以我需要传递一个复杂的参数 "parameterDesignatorValuePairSet",这个参数由两个复杂的参数组成,它们的名字完全相同,都是 "parameterDesignatorValuePair":我无法通过使用 Python 字典来做到这一点 :-(

我尝试使用列表和元组,但 SUDS 给我返回了错误……

谢谢你的帮助

1 个回答

1

你有没有试过这样做:

param = client.factory.create('ns1:parameterDesignatorValuePairNamespace')
param.parameterDesignator = val1
param.parameterValue = val2

client.service.FunctionName(param)

在通过SUDS连接后,可以通过打印WSDL文件来查看命名空间。

撰写回答