python使用suds来调用webservice

对于python仅作为客户端调用webservice的情况,推荐使用suds库来完成,比起zsi,soapy之类,它可以说是相当轻量级,使用非常方便。

  安装suds建议使用easy_insall来做。下面是官方的一些例子:

 

Python代码  

from suds.client import Client  
url = 'http://localhost:7080/webservices/WebServiceTestBean?wsdl'  
client = Client(url)  
  
#查看该service提供的方法  
print client  
  
Suds - version: 0.3.3 build: (beta) R397-20081121  
  
Service (WebServiceTestBeanService) tns="http://test.server.enterprise.rhq.org/"  
   Prefixes (1):  
     ns0 = "http://test.server.enterprise.rhq.org/"  
   Ports (1):  
     (Soap)  
       Methods:  
         addPerson(Person person, )  
         echo(xs:string arg0, )  
         getList(xs:string str, xs:int length, )  
         getPercentBodyFat(xs:string name, xs:int height, xs:int weight)  
         getPersonByName(Name name, )  
         hello()  
         testExceptions()  
         testListArg(xs:string[] list, )  
         testVoid()  
         updatePerson(AnotherPerson person, name name, )  
   Types (23):  
     Person  
     Name  
     Phone  
     AnotherPerson  

 

   1.简单参数调用

 

Python代码  收藏代码

result = client.service.getPercentBodyFat('jeff', 68, 170)  
print result  
  
result = client.service.getPercentBodyFat(name='jeff', height=68, weight=170)  
print result  
  
#词典  
d = dict(name='jeff', height=68, weight=170)  
result = client.service.getPercentBodyFat(**d)  
print result  
  
You have 21% body fat.  

   2.复杂参数

 

Java代码  收藏代码

person = client.factory.create('Person')  
print person  

Java代码  

(Person)=  
  {  
    phone = []  
    age = NONE  
    name(Name) =   
        {  
            last = NONE  
            first = NONE  
        }  
   }  

 #设置变量

Java代码  收藏代码

phone = client.factory.create('Phone')  
phone.npa = 202  
phone.nxx = 555  
phone.number = 1212  

  Python代码  

name = client.factory.create('Name')  
name.first = 'Elmer'  
name.last = 'Fudd' 

Python代码  收藏代码

person.name = name  
person.age = 35  
person.phone = [phone]  
  
#或者  
person.phone.append(phone)  

  Java代码  收藏代码

try:  
   person_added = client.service.addPerson(person)  
except WebFault, e:  
  print e  

  在0.3.8以上版本还提供了更简单的调用方式,完美的json

 

Python代码  

person = {}  
#根据对象结构构造json  
  
phone = {  
    'npa':202,  
    'nxx':555,  
    'number':1212,  
}  
  
name = {  
    'first':'Elmer',  
    'last':'Fudd'  
}  
  
person['name'] = name  
person['age'] = 35  
person['phone'] = [phone,]  
  
try:  
   person_added = client.service.addPerson(person)  
except WebFault, e:  
  print e  

 3.异常处理

 

Python代码  收藏代码

client = client(url, faults=False)  
result = client.service.addPerson(person)  
print result  
( 200, person ...)  

 更多可以查看官方文档:https://fedorahosted.org/suds/wiki/Documentation,里面还讲了soap头得安全认证,webservice cache等高级话题,有需要可以查看,都比较详细。

posted @ 2017-11-30 09:21  553490191  阅读(5523)  评论(0编辑  收藏  举报