如何使用suds python获取肥皂信封

时间:2014-01-13 05:31:50

标签: python wsdl suds

如何获取soap信封,如何在发送到服务器之前更改值。

ex:肥皂信封

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"    
xmlns:ws="http://www.altoromutual.com/bank/ws/">
<soap:Header/>
<soap:Body>
  <ws:TransferBalance>
     <!--Optional:-->
     <ws:transDetails>
        <ws:transferDate>2013-01-01T00:00:00</ws:transferDate>
        <!--Optional:-->
        <ws:debitAccount>1001160141</ws:debitAccount>
        <!--Optional:-->
        <ws:creditAccount>1001160140</ws:creditAccount>
        <ws:transferAmount>2.0</ws:transferAmount>
     </ws:transDetails>
  </ws:TransferBalance>

我想保留此信封并在发送到服务器之前更改值。如何使用suds

谢谢

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,你不一定需要使用suds来修改信封。相反,您可以将请求保存为模板,使用您最喜欢的模板引擎更改您需要更改的任何值,并使用__inject参数将整个请求传递给suds调用。

这是一个简单的例子:

import suds
from mako.template import Template

WSDL = 'https://example.com/someservice?wsdl'

client = suds.client.Client(WSDL)
template = Template(filename='template.xml')
request = template.render(debitaccount='someaccount', creditaccount='anotheraccount')
response = client.service.some_call(__inject={'msg':request})

和模板

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"    
xmlns:ws="http://www.altoromutual.com/bank/ws/">
<soap:Header/>
<soap:Body>
  <ws:TransferBalance>
     <!--Optional:-->
     <ws:transDetails>
        <ws:transferDate>2013-01-01T00:00:00</ws:transferDate>
        <!--Optional:-->
        <ws:debitAccount>${debitaccount}</ws:debitAccount>
        <!--Optional:-->
        <ws:creditAccount>${creditaccount}</ws:creditAccount>
        <ws:transferAmount>2.0</ws:transferAmount>
     </ws:transDetails>
  </ws:TransferBalance>
</soap:Body>
</soap:Envelope>