zeep - продвинутая библиотека для обработки сообщений SOAP в python.Вам следует предоставить файл wsdl, чтобы ваша проблема могла быть лучше проанализирована.
Но, глядя на предоставленный вами xml-запрос, кажется, что аутентификация выполняется с использованием заголовков, а данные отправляются в теле.Подобно тому, который я недавно исправил.См. Мой xml-запрос моего варианта использования ниже.
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<ns0:myheaders xmlns:ns0="xxxxxx_stackoverflow_mask_xxxxxx">
<ns0:username>xxxxxx_stackoverflow_mask_xxxxxx</ns0:username>
<ns0:password>xxxxxx_stackoverflow_mask_xxxxxx</ns0:password>
</ns0:myheaders>
</soap-env:Header>
<soap-env:Body>
<ns0:Search02c xmlns:ns0="xxxxxx_stackoverflow_mask_xxxxxx">
<ns0:name>
<ns0:title>Mr</ns0:title>
<ns0:forename>Srikanth</ns0:forename>
<ns0:surname>Badveli</ns0:surname>
</ns0:name>
</ns0:Search02c>
</soap-env:Body>
</soap-env:Envelope>
Для приведенного выше xml код выглядит следующим образом
from zeep import Client
header_credentials = {'username':'xxxxx','password':'xxxxx'}
tac_data = {'name': {'title':'xxxxx','forename':'xxxxx','surname':'xxxxx'}}
client = Client(wsdl=wsdl)
response = client.service.Search02c(tac_data, _soapheaders={'callcreditheaders':header_credentials})
В приведенном выше коде «Search02c» - это имя операциидля обслуживания.Имя операции можно найти при проверке файла wsdl.В моем случае "Search02c" принимает 2 аргумента, которые являются body и header. "Tac_data" - это словарь xml body (не header), а "header_credentials" - словарь учетных данных.Ваш вариант использования может принимать заголовок и тело с одним аргументом.Структура аргументов может быть найдена после имени операции в проверяемом файле wsdl.
Вы можете найти имя операции и ее структуру в конце вывода, запустив ее в командной строке.
python -mzeep wsdl_file_path.wsdl
Ниже приведена операция для моего wsdl-файла.
Operations:
Search02c(searchDefinition: tac_data, _soapheaders={'headers': header_credentials}) -> outputResult: ns1:output
Помните, что zeep принимает словарь только как входные данные и предоставляет словарь как выходной.Если вы хотите получить ответ в формате xml, используйте raw_response = True в настройках клиента.
Для получения дополнительной информации, пожалуйста, обратитесь к zeep документации