Программно вызывать методы RPC для конечной точки SOAP в python
Я ищу простой способ программно вызывать вызов SOAP/RPC через Python. Что-то вроде:
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, но основные принципы те же). Это предполагает, что я знаю имя метода заранее и не могу определить его во время выполнения.
В поисках решений они либо больше не поддерживаются, либо пытаются сделать слишком много "волшебства". Например, посмотрите этот слишком сложный вариант или это решение, которое в основном "Создайте свой собственный XML и отправьте его поверх".
Есть ли какая-нибудь библиотека, которая может создавать для меня "исходящий" XML без необходимости проходить через обручи? У меня уже есть HTTP-сервер, который получает входящий RPC и хочет использовать requests
правильно обрабатывать такие вещи, как проверка сертификата SSL.
1 ответ
Вы можете дать 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))
(Я автор, поэтому дайте мне знать, если у вас есть какие-либо проблемы с этим)