首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用python库在<wsse:security>标头中添加SOAP:mustUnderstand=“1”

如何使用python库在<wsse:security>标头中添加SOAP:mustUnderstand=“1”
EN

Stack Overflow用户
提问于 2021-07-28 07:01:58
回答 1查看 450关注 0票数 0

我想让我的XML请求看起来像这样-

代码语言:javascript
运行
复制
<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">

但是我从泽普那里得到的输出是这样的-

代码语言:javascript
运行
复制
<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:芥末理解器=“1”?

我的密码是-

代码语言:javascript
运行
复制
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')

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-02-03 02:26:30

代码语言:javascript
运行
复制
from lxml.etree import QName
from zeep.utils import detect_soap_env
from zeep.wsse.utils import get_security_header

soap_env = detect_soap_env(root_node)
security = get_security_header(envelope)
security.set(QName(soap_env, "mustUnderstand"), "1")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68555824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档