Программно вызывать методы 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))

(Я автор, поэтому дайте мне знать, если у вас есть какие-либо проблемы с этим)

Другие вопросы по тегам