我正在寻找一种通过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)
我知道有几个Python库支持SOAP/RPC调用;但是它们都做了一些"魔术",并允许这样的事情:
result = client.service.getPercentBodyFat('jeff', 68, 170)
(前面的示例取自 SUDS 文档,但基本原理相同)。这假设我提前知道方法的名称,并且无法在运行时确定它。
寻找解决方案,他们要么不再维护,要么试图做太多的"魔法"。例如,请参阅这个过于复杂的soution或这个解决方案,它基本上是"构建自己的XML并将其发送过来"。
是否有任何库可以为我构建"出站"XML,而不必经历箍?我已经有一个 HTTP 服务器,它将接收入站 RPC,并希望使用requests
来正确处理 SSL 证书验证等事情。
你可以给 python-zeep 一个机会(http://docs.python-zeep.org)。它可以通过以下代码轻松生成要发送的xml:
client = zeep.Client(
wsdl='http://www.webservicex.net/ConvertSpeed.asmx?WSDL')
doc = client.service._binding.create_message('ConvertSpeed', 100,
'kilometersPerhour', 'milesPerhour'))
print(etree.tostring(doc, pretty_print=True))
(我是作者,所以如果你对此有任何问题,请告诉我)