Как добавить заголовок в SOAP с помощью pysimplesoap?

У меня есть такая схема:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="tns" xmlns:nam="https://iotchet.ru/namespases">
   <soapenv:Header>
      <tns:RequestHeader>
         <!--Optional:-->
         <tns:sessionkey>b01daba7289e4e8baa87dbd1eb8c4f6b</tns:sessionkey>
      </tns:RequestHeader>
   </soapenv:Header>
   <soapenv:Body>
      <tns:SendContainer>
         <!--Optional:-->
         <tns:Container>
            <nam:name>test</nam:name>
            <nam:content></nam:content>
         </tns:Container>
      </tns:SendContainer>
   </soapenv:Body>
</soapenv:Envelope>

Здесь я делаю запрос:

from pysimplesoap.client import SoapClient

client = SoapClient(wsdl='http://localhost:5555/api/containerize?wsdl')
client.SendContainer(Container={'name': 'test', 'content': 'test'})

Я не могу найти способ добавить заголовок к моему клиентскому запросу.

1 ответ

Решение

Например, предположим, что вы хотите добавить учетные данные в заголовок следующим образом.

<soapenv:Header>
  <Credential>
     <user>hoge</user>
     <password>hoge</password>
  </Credential>
</soapenv:Header>

Тогда вы можете использовать следующий код.

client = SoapClient(wsdl=WSDL_FILE)
client['Credential'] = { 'user': 'hoge', 'password': 'hoge' }

Такое правило трудно найти, потому что pysimplesoap заброшен, а его документы потеряны.

Я нашел это в Issue_test.py в GitHub. Поскольку эта программа тестирует функции, взятые из реальных случаев, она имеет полезные примеры.

Если вы готовы переключиться, я рекомендую Zeep. У этого есть больше особенностей и намного более хороших документов.

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