使用Zeep创建具有属性和字符串值的xsd.Element

2024-10-02 18:17:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Zeep创建一个自定义SOAP头元素,它既有一个属性又有一个字符串值。没有其他子元素。我确信我错过了一些关于如何做到这一点的信息,希望有人能给我指出正确的方向

我想要的是:

<wsse:Password Type="StringAttribute">StringPasswordValue</wsse:Password>

到目前为止我所尝试的(我只是在这里猜测语法):

password_header = xsd.Element('{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Password', xsd.ComplexType([
    xsd.String(),
    xsd.Attribute('Type', xsd.String())
    ]))

password_value = password_header('StringPasswordValue', Type='StringAttribute')

我也可能期望它在没有xsd.ComplexType的情况下是可行的,只是指定了xsd.String的属性,但没有这样的运气。我不想通过使用wsse:UsernameToken来实现这一点


Tags: 元素string属性typepasswordheaderxsdzeep
1条回答
网友
1楼 · 发布于 2024-10-02 18:17:23

您可以使用zeep.wsse.utils模块创建密码元素:

from zeep.wsse.utils import WSSE
password = WSSE.Password("StringPasswordValue", Type="StringAttribute")

这是基于how the password is created for UsernameToken

或者您可以直接使用lxml创建元素(就像zeep does it

from lxml.builder import ElementMaker

wsse_ns = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
builder = ElementMaker(namespace=wsse_ns, nsmap={"wsse": wsse_ns})
password = builder.Password("StringPasswordValue", Type="StringAttribute")

相关问题 更多 >