2012-11-15 3 views
0

웹 서비스 (NuSoap)와 통신하는 클라이언트를 파이썬으로 작성하려고합니다. 식별 데이터 및 쿼리는 인코딩 문자열 (base64)로 XML로 전송됩니다. 이 XML은 다음과 같습니다파이썬 + SUDS : 인코딩 문자열로 요청 (base64)

<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을 읽을 필요가 :

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

이 웹 서비스는이 WSDL을 가지고있다.

+0

Base64는 암호화가 아니고 암호화입니다. – ThiefMaster

+0

감사합니다, ThiefMaster. 어떤 제안? – Mark

+0

무엇이 질문입니까? 또는 다른 방법을 사용하십시오 : 무엇을 시도 했습니까? 어떻게 실패 했습니까? – ckhan

답변

1

"인코딩 된"XML을 읽으려면 "해독"해야합니다. : D

첨부 파일을 다운로드해야하는 EWS에서 suds를 사용하는 프로젝트가 있습니다. EWS는 base64Binary의 첨부 파일을 반환하므로 base64의 b64decode 만 사용합니다. 이 같은 것이 당신을 위해 일해야합니다 :

from base64 import b64decode 

encoded_xml = NuSoapMethodToGetBase64EncodedXMLString() 
decoded_xml = b64decode(CV3Data)