3

我正在尝试使用 python zeep 连接到肥皂服务(使用 wsdl )。

以下是soap-ui 为操作生成的XML。

但是我发现很难确定如何设置soap headers。在这种情况下,我们在 header 中有多个 XML 元素

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:acm="http://www.acme.com/ACM">
       <soapenv:Header>
          <acm:MessageID>?</acm:MessageID>
          <acm:ExName>?</acm:ExName>
          <acm:Authentication>
             <acm:Username>?</acm:Username>
             <acm:Password>?</acm:Password>
          </acm:Authentication>
       </soapenv:Header>
       <soapenv:Body>
          <acm:LIST_STOCKS>
             <!--Optional:-->
             <acm:STOCKID>?</acm:STOCKID>
             <!--Optional:-->
             <acm:PRODUCT>?</acm:PRODUCT>
          </acm:LIST_STOCKS>
       </soapenv:Body>
    </soapenv:Envelope>

谢谢。

4

1 回答 1

2

这是一个老问题,但我会在这里留下一个答案以供将来参考。

从文档中看不是很清楚,但是您可以通过_soap_headers使用字典进行设置来设置元素。

在给定的示例中:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:acm="http://www.acme.com/ACM">
       <soapenv:Header>
          <acm:MessageID>?</acm:MessageID>
          <acm:ExName>?</acm:ExName>
          <acm:Authentication>
             <acm:Username>?</acm:Username>
             <acm:Password>?</acm:Password>
          </acm:Authentication>
       </soapenv:Header>
       <soapenv:Body>
          <acm:LIST_STOCKS>
             <!--Optional:-->
             <acm:STOCKID>?</acm:STOCKID>
             <!--Optional:-->
             <acm:PRODUCT>?</acm:PRODUCT>
          </acm:LIST_STOCKS>
       </soapenv:Body>
    </soapenv:Envelope>

您将像这样发送标头:

# Prepare header values and dicts
MessageID = 000
ExName = 'Value'
Authentication = {'Username': 'User', 'Password': 'YourPassword'}

# Set required body content
LIST_STOCKS = [] 

# Call service and set SOAP headers directly in _soapheaders using dictionary
response = 
self.client.service.WebServiceName(_soapheaders={'MessageID': MessageID, 'ExName': ExName, 'Authentication': Authentication},LIST_STOCKS=LIST_STOCKS)
于 2018-07-15T16:51:55.527 回答