SUDS自定义标题

时间:2014-03-30 09:00:40

标签: python python-2.7 soap soap-client suds

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

XML来自SOAP UI:

<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>

3 个答案:

答案 0 :(得分:1)

编辑 -

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


看看这里:How to add http headers in suds 0.3.6?

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

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 :(得分:0)

来自官方SUDS documentation的这个片段:

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)

答案 2 :(得分:0)

我需要添加2个带有xmlns的soap标头。 我在answer of @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))