2012-11-15 33 views
0

我想在Python中創建一個客戶端,它將與Web服務(NuSoap)進行通信。標識數據和查詢以XML格式作爲編碼字符串(base64)發送。 這個XML是:Python + SUDS:請求作爲編碼字符串(base64)

<CV3Data version="2.0"> 
    <request> 
    <authenticate> 
     <user>m*****</user> 
     <pass>m******</pass> 
     <serviceID>b*******0</serviceID> 
    </authenticate> 
    <requests> 
     <reqProducts> 
     <reqProductRange start="9294" end="9296"/> 
     </reqProducts> 
    </requests> 
    </request> 
</CV3Data> 

此Web服務有這個WSDL:

<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://service.commercev3.com/CV3Data.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="https://service.commercev3.com/CV3Data.xsd"> 
<types> 
    <xsd:schema targetNamespace="https://service.commercev3.com/CV3Data.xsd"> 
    <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> 
    <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/> 
    </xsd:schema> 
</types>  
<message name="CV3DataRequest"> 
    <part name="data" type="xsd:base64Binary"/> 
</message> 
<message name="CV3DataResponse"> 
    <part name="return" type="xsd:base64Binary"/> 
</message> 
<portType name="CV3Data.xsdPortType"> 
    <operation name="CV3Data"> 
    <input message="tns:CV3DataRequest"/> 
    <output message="tns:CV3DataResponse"/> 
    </operation> 
</portType> 
<binding name="CV3Data.xsdBinding" type="tns:CV3Data.xsdPortType"> 
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="CV3Data"> 
    <soap:operation soapAction="http://service.commercev3.com/index.php/CV3Data" style="rpc"/> 
    <input> 
    <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
    </input> 
    <output> 
    <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
    </output> 
    </operation> 
</binding> 
<service name="CV3Data.xsd"> 
    <port name="CV3Data.xsdPort" binding="tns:CV3Data.xsdBinding"> 
    <soap:address location="http://service.commercev3.com/index.php"/> 
    </port> 
</service> 
</definitions> 

我需要閱讀CV3Data。

+0

Base64是編碼,而不是加密。 – ThiefMaster

+0

謝謝@ThiefMaster。有什麼建議麼? – Mark

+0

什麼問題?或換句話說:你有什麼嘗試,它是如何失敗? – ckhan

回答

1

要閱讀「編碼」的XML,你必須「解碼」它。 :D

我有一個使用EWS泡沫的項目,我需要下載附件。 EWS在Base64Binary中返回附件,所以我只是使用base64中的b64decode來完成它。像這樣的東西應該適合你:

from base64 import b64decode 

encoded_xml = NuSoapMethodToGetBase64EncodedXMLString() 
decoded_xml = b64decode(CV3Data)