如何使用 python zeep 库在 <wsse:security> 标头中添加 SOAP-ENV:mustUnderstand="1"

问题描述

我希望我的 XML 请求看起来像这样 -

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" SOAP-ENV:mustUnderstand="1">

但是我从 zeep 得到的输出是这样的 -

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

如何在 zeep 生成的 xml 中包含 xmlns:wsu 和 SOAP-ENV:mustUnderstand="1"?

我的代码是 -

import zeep as zp 
from lxml import etree
from zeep.wsse import BinarySignature
import xmlsec
from zeep.transports import Transport


client = zp.Client('http://locahost:8085/soap-server/gor/request/MasterData.wsdl',wsse=BinarySignature(key_file='private.pem',certfile='cert.pem',digest_method=xmlsec.constants.TransformSha256))

transport  = Transport()
factory = client.type_factory('ns0')

# product_type = client.get_type('ns0:PRODUCTMASTERDATA')
barcode = client.get_type('ns0:BARCODEDATA')(MPN_CAGE_BARCODE="test123")
description = client.get_type('ns0:DESCRIPTIONDATA')(PRDTXT='Test SKU',LANGU='EN')
dimensions = client.get_type('ns0:DIMENSIONDATA')(LAENG_LENGTH=10,BREIT_WIDTH= 10,HOEHE_HEIGHT= 10,MEABM_UNIT= 'INCH')
level_type = client.get_type('ns0:LEVELTYPEDATA')(QUANTITY=1,BARCODE_LIST=barcode,DIMENSION=dimensions,BRGEW_WEIGHT={'_value_1':"2",'GEWEI_TC_UNIT': "OUNCE"},MEINS_LABEL='ITEM')
item_config = client.get_type('ns0:ITEMCONfigDATA')(LEVEL_TYPE=level_type)
Metadata = factory.MetaDATA(MESSAGEID='123456',CREA_DATE="2021-07-06+05:30",CREA_TIME="14:57:06.839+05:30",RECEIVERID="43567",SENDERID="89743894")
masterdata = factory.PRODUCTMASTERDATA(MetaDATA=Metadata,DESCRIPTION=description,TAG_LIST={'CHARG_TAG_NAME':{'_value_1':"23223",'MANDATORY':'true'}},ITEM_CONfig=item_config,MATNR_PRODUCT_SKU='334423')
product_list = factory.PRODUCTLISTDATA(PRODUCT_MASTER=masterdata,LGNUM='12')

node = client.create_message(client.service,'PRODUCT',PRODUCT_MASTER=masterdata,LGNUM='12')
x = etree.tostring(node)
print(x)
client.service.PRODUCT(PRODUCT_MASTER=masterdata,LGNUM='12')

任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)