SUDS 自定义标头

问题描述 投票:0回答:4

我是 Python 新手,我使用 suds 作为 wsdl 客户端。我如何为此创建自定义请求标头。

从 SOAP UI 获取 XML :

<soapenv:Header>
      <sbus:SBusContext message-tracking-id="?" correlation-id="?" entry-dtime="?" timestamp="?" entry-system="?" entry-system-principal="?" entry-url="?" priority="?">
         <!--Optional:-->
         <sbus:Keys>
            <!--1 or more repetitions:-->
            <sbus:Key keyType="?" keyValDataType="string">
               <sbus:KeyValue>?</sbus:KeyValue>
            </sbus:Key>
         </sbus:Keys>
         <!--Optional:-->
         <sbus:ExtContext>?</sbus:ExtContext>
      </sbus:SBusContext>
   </soapenv:Header>
python python-2.7 soap soap-client suds
4个回答
3
投票

编辑-

我意识到您可能在询问 SOAP 标头,而不是 http 标头。如果是这样,请忽略我的回答。我的错。


看这里:如何在 suds 0.3.6 中添加 http 标头?

您可以在创建客户端时添加标头,如下所示:

client = suds.client.Client(url, headers={'key': 'value'})

或者在创建客户端之后,通过使用 set_options 如下所示:

client.set_options(headers={'key2': 'value'})

值得注意的是,原来的 suds 包不再维护(最后发布于 2010 年 9 月)。它缺少您可能需要的各种功能,例如 gzip 压缩(因此,如果您使用旧的 suds 包,则不必添加“accept-encoding:gzip”标头)。各种分叉如雨后春笋般涌现。我相信其中最活跃的是 suds-jurko。


1
投票

此片段来自官方 SUDS 文档

from suds.sax.element import Element
client = client(url)
ssnns = ('ssn', 'http://namespaces/sessionid')
ssn = Element('SessionID', ns=ssnns).setText('123')
client.set_options(soapheaders=ssn) 
result = client.service.addPerson(person)

0
投票

我需要添加 2 个带有 xmlns 的肥皂头。 我按照@piotr sz答案找到了解决方案。 这是我需要的解决方案:

userName = Element('UserName').setText(fco.user)
password = Element('Password').setText(fco.pwd)
fdxns = Attribute('xmlns', "http://fdx.co.il/Authentication")
for field in userName, password:
    field.append(fdxns)
client.set_options(soapheaders=(userName, password))

0
投票

suds 有一个内置的安全功能来设置安全标头

url = 'http://something.some/service.svc?wsdl'
client= Client(url, faults=False)
security = Security()
token = UsernameToken('username', 'password')
token.setcreated()
security.tokens.append(token)
client.set_options(wsse=security)
© www.soinside.com 2019 - 2024. All rights reserved.