将命名空间添加到Suds中的默认WSSE安全对象

2024-09-28 11:39:58 发布

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

我知道如何向SOAP请求添加头。但这会生成一个与我需要传递的标题不匹配的标题。返回以下标题:

   <SOAP-ENV:Header>
      <wsse:Security mustUnderstand="true">
         <wsse:UsernameToken>
            <wsse:Username>CABLE</wsse:Username>
            <wsse:Password>CABLE</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
   </SOAP-ENV:Header>

但是,我需要修改该头的名称空间,以传递安全对象和UsernameToken对象的特定名称空间。我似乎不知道如何覆盖提供的默认值。在

^{pr2}$

下面是生成上述内容的Python代码

security = Security()
token = UsernameToken('CABLE', 'CABLE')
security.tokens.append(token)
client.set_options(wsse=security)

Tags: 对象env名称token标题username空间password
1条回答
网友
1楼 · 发布于 2024-09-28 11:39:58

明白了。答案就在这里。只需要使用ns参数

def createWSSecurityHeader(username,password):
    # Namespaces
    wsse = ('wsse', 'http://schemas.xmlsoap.org/ws/2002/07/secext')

    # Create Security Element
    security = Element('Security', ns=wsse)

    # Create UsernameToken, Username/Pass Element
    usernametoken = Element('UsernameToken', ns=wsse)
    uname = Element('Username', ns=wsse).setText(username)
    passwd = Element('Password', ns=wsse).setText(password)

    # Add Username and Password elements to UsernameToken element
    usernametoken.insert(uname)
    usernametoken.insert(passwd)

    security.insert(usernametoken)
    return security

相关问题 更多 >

    热门问题