如何使用zeep产生SOAP请求

时间:2019-07-29 14:25:49

标签: python xml soap zeep

使用Python + Zeep生成SOAP请求时遇到问题。我需要产生一个类似于此示例SOAP请求的请求:

val bulletedList = listOf("One", "Two", "Three").toBulletedList()
label.text = bulletedList

我使用SOAPUI测试了此请求,并且效果很好。

使用Zeep,我无法产生类似的输出。

我已经尝试使用字典并通过传递元素本身来手动创建元素。我总是会收到这样的错误:

   <soapenv:Header>
      <typ:UserCredentials>
         <typ:Username>username</typ:Username>
         <typ:Password>password</typ:Password>
         <!--Optional:-->
         <typ:Extension>
            <!--You may enter ANY elements at this point-->
         </typ:Extension>
         <!--You may enter ANY elements at this point-->
      </typ:UserCredentials>
   </soapenv:Header>
   <soapenv:Body>
      <typ:GetChildren>
         <typ:InterplayURI>uri</typ:InterplayURI>
         <!--Optional:-->
         <typ:IncludeFolders>true</typ:IncludeFolders>
         <!--Optional:-->
         <typ:IncludeFiles>false</typ:IncludeFiles>
         <!--Optional:-->
         <typ:IncludeMOBs>false</typ:IncludeMOBs>
         <!--Optional:-->
         <!--Optional:-->
         <typ:ReturnAttributes>
            <!--Zero or more repetitions:-->
            <typ:Attribute Group="?" Name="?">?</typ:Attribute>
         </typ:ReturnAttributes>
         <!--Optional:-->
         <typ:Extension>
            <!--You may enter ANY elements at this point-->
         </typ:Extension>
         <!--You may enter ANY elements at this point-->
      </typ:GetChildren>
   </soapenv:Body>
</soapenv:Envelope>

Zeep产生的请求如下:

    'Errors': {
        'Error': [
            {
                'InterplayURI': None,
                'Message': 'The username or password is incorrect',
                'Details': 'Unable to login user null to workgroup null.',
                'Extension': None,
                '_value_1': None,
                'Code': 'INVALID_CREDENTIALS',
                '_attr_1': {
            }
            }
        ]
    },
    'Results': None,
    'Extension': None,
    '_value_1': None,
    '_attr_1': None
}

服务器似乎无法理解此请求,因为它与开头显示的预期请求不同。

我的python代码实际上看起来像这样。它包含我已经尝试过的部分,但实际上并未用于上面的生成输出。使用样本数据修改了一些值:

b'<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"><soap-env:Header><ns0:Username xmlns:ns0="http://avid.com/interplay/ws/assets/types">user</ns0:Username><ns1:Password xmlns:ns1="http://avid.com/interplay/ws/assets/types">password</ns1:Password></soap-env:Header><soap-env:Body><ns0:GetChildren xmlns:ns0="http://avid.com/interplay/ws/assets/types"><ns0:InterplayURI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:GetChildrenType"><ns0:InterplayURI>uri</ns0:InterplayURI></ns0:InterplayURI></ns0:GetChildren></soap-env:Body></soap-env:Envelope>'

最后,由于示例请求中所有这些嵌套的自定义类型,使用Zeep生成此输出似乎是一个难题。我对Soap标头中的凭据也有疑问。

任何人都有实现此目标的想法?也许自己编写这些xml会更容易?

0 个答案:

没有答案