【发布时间】:2016-08-21 19:45:58
【问题描述】:
我正在寻找一种通过 Python 以编程方式调用 SOAP/RPC 调用的简单方法。比如:
method_to_invoke, args = parse_user_input()
outbound_xml = library.call_remote_method(method_to_invoke, args)
result = requests.post(... data=outbound_xml)
我知道有 several Python 库支持 SOAP/RPC 调用;然而他们都做了一些“魔法”,并允许这样的事情:
result = client.service.getPercentBodyFat('jeff', 68, 170)
(上一个示例取自suds documentation,但基本原理相同)。这假设我提前知道方法的名称并且无法在运行时确定它。
寻找解决方案,它们要么不再维护,要么尝试做太多“魔术”。例如,请参阅 this over-complicated soution 或 this solution,这基本上是“构建您自己的 XML 并将其发送过来”。
是否有任何库可以为我构建“出站”XML 而无需费力?我已经有一个 HTTP 服务器,它将接收入站 RPC,并希望使用 requests 来正确处理 SSL 证书验证之类的事情。
【问题讨论】:
-
有什么原因你不能使用类似 suds 的东西并选择使用反射的方法(例如 getattr)?除了方法名称之外,是否还需要动态的其他东西?
-
@Charlie 是否愿意在答案中提供一个示例?反射可能会起作用,这似乎是我宁愿避免的不必要的并发症。我知道 RPC 库旨在简化生活,但缺乏易于扩展的 Python 式、简单的库似乎很荒谬。
-
好的,抱歉,我没有解决方案。以我的经验,SOAP 本来就是脆弱的——你与服务建立“合同”,然后如果它发生变化,就会有一个大的瀑布过程来进行更新。
标签: python web-services soap xml-rpc