如何在Python

时间:2018-03-14 16:18:30

标签: python soap suds

当我尝试连接到web服务时遇到问题,wsdl就像:

<?xml version="1.0" encoding="utf-8"?>
<definitions 
    xmlns:typens="urn:test" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns="http://schemas.xmlsoap.org/wsdl/" 
    name="test" 
    targetNamespace="urn:test">
<message name="webservice">
<part name="method" type="xsd:string"/>
<part name="data" type="soapenc:Array"/>
</message>
<message name="webserviceResponse">
<part name="webserviceReturn" type="soapenc:Array"/>
</message>
<portType name="soapWsPortType">
<operation name="webservice">
<documentation>Webservice</documentation>
<input message="typens:webservice"/>
<output message="typens:webserviceResponse"/>
</operation>
</portType>
<binding name="soapWsBinding" type="typens:soapWsPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="webservice">
<soap:operation soapAction="urn:soapWsAction"/>
<input>
<soap:body namespace="ns1" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body namespace="ns1" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="testService">
<port name="soapWsPort" binding="typens:soapWsBinding">
<soap:address location="http://soapwebservice.doctorsender.com/soapserver.php"/>
</port>
</service>
</definitions>

我一直尝试在suds中创建Element语句,但它不起作用,这是我的代码:

from suds.client import Client
from suds.xsd.doctor import ImportDoctor, Import
from suds.sax.element import Element

imp = Import('http://schemas.xmlsoap.org/soap/encoding/', location='http://schemas.xmlsoap.org/soap/encoding/')
doctor = ImportDoctor(imp)
client = Client(url_doctor, doctor=doctor, cache=None)

user = 'someuser'
pwd = 'somepwd'

user_header = Element('user').setText(user)
pwd_header = Element('pass').setText(pwd)
header_list = [user_header, pwd_header]

client.set_options(soapheaders=header_list)
client.service.webservice('somemethod')

这是我得到的:

(Array){
   item[] = 
      (item){
         key[] = 
            "error",
         value[] = 
            True,
      },
      (item){
         key[] = 
            "msg",
         value[] = 
            "Error: autentication failure.",
      },
 }

这个网络服务非常陌生,我甚至尝试写一个xml文件manuelly,但它也不起作用,所以提前感谢任何有用的信息。

0 个答案:

没有答案