当前位置: 代码迷 >> Web前端 >> python应用suds调用webservice
  详细解决方案

python应用suds调用webservice

热度:563   发布时间:2012-10-08 19:54:56.0
python使用suds调用webservice

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

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

?

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.简单参数调用

?

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.复杂参数

?

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

?

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

?#设置变量

phone = client.factory.create('Phone')
phone.npa = 202
phone.nxx = 555
phone.number = 1212
?
name = client.factory.create('Name')
name.first = 'Elmer'
name.last = 'Fudd'

?

person.name = name
person.age = 35
person.phone = [phone]

#或者
person.phone.append(phone)
?
try:
   person_added = client.service.addPerson(person)
except WebFault, e:
  print e
?

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

?

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.异常处理

client = client(url, faults=False)
result = client.service.addPerson(person)
print result
( 200, person ...)
?更多可以查看官方文档:https://fedorahosted.org/suds/wiki/Documentation,里面还讲了soap头得安全认证,webservice cache等高级话题,有需要可以查看,都比较详细。
1 楼 erickdu888 2011-12-08  
真是个好东西
  相关解决方案