首页 文章

如何使用Zeep从SOAP请求中删除冗余头

提问于
浏览
1

当尝试使用Zeep从Netsuite webservice(WSDL https://webservices.sandbox.netsuite.com/wsdl/v2016_1_0/netsuite.wsdl)创建产品搜索的SOAP请求时,我使用以下代码:

result = client.service.search(searchRecord=item_search, _soapheaders={
    'searchPreferences': search_preferences,
    'applicationInfo': app_info,
    'passport': passport,
})

但是zeep会生成以下形式的XML:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
   <soap-env:Header>
      <ns0:passport xmlns:ns0="urn:messages_2016_2.platform.webservices.netsuite.com">
         <ns1:email xmlns:ns1="urn:core_2016_2.platform.webservices.netsuite.com">some@email.com</ns1:email>
         <ns2:password xmlns:ns2="urn:core_2016_2.platform.webservices.netsuite.com">somepassword</ns2:password>
         <ns3:account xmlns:ns3="urn:core_2016_2.platform.webservices.netsuite.com">12345</ns3:account>
         <ns4:role xmlns:ns4="urn:core_2016_2.platform.webservices.netsuite.com" internalId="1234" type="role" />
      </ns0:passport>
      <ns5:tokenPassport xmlns:ns5="urn:messages_2016_2.platform.webservices.netsuite.com" />
      <ns6:applicationInfo xmlns:ns6="urn:messages_2016_2.platform.webservices.netsuite.com">
         <ns6:applicationId>ABCDE</ns6:applicationId>
      </ns6:applicationInfo>
      <ns7:partnerInfo xmlns:ns7="urn:messages_2016_2.platform.webservices.netsuite.com" />
      <ns8:searchPreferences xmlns:ns8="urn:messages_2016_2.platform.webservices.netsuite.com">
         <ns8:bodyFieldsOnly>false</ns8:bodyFieldsOnly>
         <ns8:returnSearchColumns>true</ns8:returnSearchColumns>
         <ns8:pageSize>20</ns8:pageSize>
      </ns8:searchPreferences>
   </soap-env:Header>
   <soap-env:Body>
      <ns0:search xmlns:ns0="urn:messages_2016_2.platform.webservices.netsuite.com">
         <ns0:searchRecord xmlns:ns3="urn:common_2016_2.platform.webservices.netsuite.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns3:ItemSearchBasic">
            <ns3:isInactive>
               <ns2:searchValue xmlns:ns2="urn:core_2016_2.platform.webservices.netsuite.com">true</ns2:searchValue>
            </ns3:isInactive>
         </ns0:searchRecord>
      </ns0:search>
   </soap-env:Body>
</soap-env:Envelope>

请注意,生成的标头包含我没有像tokenPassport和partnerInfo那样设置的参数 . 添加的tokenPassport和护照会导致Netsuite endpoints 抛出不明确的身份验证错误 .

有人可以指点我如何从生成的XML SOAP Headers 中删除tokenPassport吗?

1 回答

相关问题