2015-06-24 55 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)