2015-06-24 54 views
2

我與一個SOAP API接口,其中一個特定方法需要一個原始XML字符串作爲參數。像這樣:Python:通過Suds發送原始XML(jurko)

import suds.client as sudscl 

client = sudscl.Client('http://host/ws.wsdl', location='http://host/ws') 

session = 'test123' 
options = '<rawXML><Item>Foobar</Item></rawXML>' 

result = client.service.ExecuteSearch(session, options) 

非常直截了當。但是,泡沫HTML編碼我剛剛發送的XML字符串,如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:ns0="http://host/ws"> 
    <SOAP-ENV:Header/> 
    <ns1:Body> 
    <ns0:ExecuteSearch> 
     <ns0:session>test123</ns0:session> 
     <ns0:options> 
      &lt;rawXML&rt;&lt;Item&rt;Foobar&lt;/Item&rt;&lt;/rawXML&rt; 
     </ns0:options> 
    </ns0:ExecuteSearch> 
    </ns1:Body> 
</SOAP-ENV:Envelope> 

噓!有沒有辦法讓泡沫通過未改變的XML字符串?

謝謝!

+0

請問[這個其他答案](http://stackoverflow.com/a/21800232/1167750)有幫助嗎? – summea

+0

@summea - 遺憾的是,沒有。 1.這將需要我建立,然後傳遞整個SOAP消息,實際上我只是想傳入*一個參數*未修改(不是從頭開始構建整個XML消息)。 2. __inject無論如何對我無效(_TypeError:ExecuteSearch()有一個意外的關鍵字參數'__inject'_)。 –

回答

1

好吧,明白了。

from suds.sax.text import Raw 
import suds.client as sudscl 

client = sudscl.Client('http://host/ws.wsdl', location='http://host/ws') 

session = 'test123' 
options = Raw('<rawXML><Item>Foobar</Item></rawXML>') 

result = client.service.ExecuteSearch(session, options)