我正在使用 Zeep 向供应商提供的 SOAP 1.1 API 发送请求,该 API 是基于 WCF 构建的,但似乎有一些特定的特性。
Zeep 目前正在生成这样的 XML
<soap-env:Body>
<ns0:GetDataServers xmlns:ns0="AIR.Services.DataSourceManagementService.Api">
<ns0:request>
<ns1:BusinessUnitSid xmlns:ns1="AIR.Services.Common.Api">1</ns1:BusinessUnitSid>
<ns2:LicenseUid xmlns:ns2="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns2:LicenseUid>
<ns3:RequestUid xmlns:ns3="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns3:RequestUid>
<ns4:SqlInstanceSid xmlns:ns4="AIR.Services.Common.Api">1</ns4:SqlInstanceSid>
</ns0:request>
</ns0:GetDataServers>
</soap-env:Body>
但是,这被拒绝并出现错误 第 1 行位置 74 中出现错误。期望来自命名空间“AIR.Services.DataSourceManagement.Api”的元素“GetDataServersRequest”..遇到名称为“GetDataServersRequest”的“元素”,命名空间“'.
但是如果我将 ns0
设置为默认命名空间,它就可以工作
<soap-env:Body>
<GetDataServers xmlns="AIR.Services.DataSourceManagementService.Api">
<request>
<ns1:BusinessUnitSid xmlns:ns1="AIR.Services.Common.Api">1</ns1:BusinessUnitSid>
<ns2:LicenseUid xmlns:ns2="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns2:LicenseUid>
<ns3:RequestUid xmlns:ns3="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns3:RequestUid>
<ns4:SqlInstanceSid xmlns:ns4="AIR.Services.Common.Api">1</ns4:SqlInstanceSid>
</request>
</GetDataServers>
</soap-env:Body>
有没有办法让 Zeep 在这个位置使用普通的 xmlns 默认命名空间?
最佳答案
您可以通过以下方式实现此目的
client.set_ns_prefix(None, namespace_name)
关于python - 在某些情况下使 zeep 使用默认命名空间而不是命名命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56022962/