使用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会更容易?