python 调用wsdl web接口,参数传入方法

转载自:https://huangfang7891-gmail-com.iteye.com/blog/1886965

1.使用Python访问WebService远程方法

1)安装Sud库 https://fedorahosted.org/suds/ 下载 tarball
2)示例代码如下:

from suds.client import Client  
from suds.transport.https import HttpAuthenticated  
t = HttpAuthenticated(username=’admin’,password=123)  
test = Client(‘http://xxx.xxx.xx.xxx:8080/WebService/ws/DeviceManageService?wsdl',transport=t)  
print test  #查看远程方法  
  
print test.service.getDeviceList() #getDeviceList为WebService提供的接口 

import pand
`### 2. 构造WebService接口需要的参数

  • 1)简单调用,无参数的情况
client=Client(url)  
client.service.fun() 
  • 2)传递对象参数(方法1)
    通过查看远程方法,发现fun 接口的参数类型为 paramType,有p1,p2两个属性
client=Client(url)  
m=client.factory.create('paramType')  
m.p1="param 1"  
m.p2="param 2"  
result=client.service.fun(m)  
print result
  • 3)传递对象参数(方法2)
client=Client(url)  
m={"p1":param 1","p2":"param 2"}  
print client.service.fun(m)
  • 4)suds把异常包装成元组输出
client=Client(url)  
client=Client(url, faults=False)  
result=client.service.funIn("error param")  
print result

3. 看懂WebService的WSDL描述文件

  • 1)查看WebService提供的接口

    标签 wsdl:operation 中的 name 表示提供的接口名称,每个接口包含 wsdl:input 和 wsdl:output 两个部分,可 以理解为输入消息和输出消息。

    wsdl:input 相当于接口的输入参数,wsdl:output 相当于接口的返回结果。

  • 2)查看WebService提供的接口的参数

    找 wsdl:message 标签中 与 接口名称相同的项,比如:

<wsdl:message name="getDevice">  
   <wsdl:part element="tns:getDevice" name="parameters"> wsdl:part>  
wsdl:message>  

其中关键词 element=“tns:getDevice” ,name=“parameters”
继续查看 xs:complexType 标签中与"tns:getDevice" 冒号后面的字符相匹配的标签,比如:

<xs:complexType name="getDevice">  
   <xs:sequence>  
       <xs:element minOccurs="0" name="deviceId" type="xs:string"/>  
   xs:sequence>  
xs:complexType>

xs:element标签描述的内容即参数的属性,这里是要求输入deviceId,参数类型为string。

即接口原型为 getDevice(string deviceId)

  • 3)如果xs:element 标签的type的值包含"tns:“前缀(如type=“tns:param”),说明这个参数是个复合结构,需要继续查找xs:complexType标签中 与”param“相匹配的标签项,依次类推。

你可能感兴趣的:(python,wsdl,webservice,client,web,Python,web)