Python开发之扩展库的安装指南及Suds(Webservice)的使用简介

昨天想用python去调用一个公司提供的webservice功能,结果发现python现在有的webservice功能都是第三方扩展库,官方竟然没有提供,经历了多次磨难后,总算知道如何去用python实现一个webservice了,下面是一些总结

我的博客:http://www.paulwangblog.com/

1.关于第三方扩展库的安装
首先建议你安装一个扩展库安装工具,推荐easy_install工具,你可以在网上下载,也可以先去下载一个 ez_setup.py ,这个程序下载后用python.exe运行一下,会自动根据你的版本帮你下载和安装一个easy_install,目前只支持到python2.6,看来python3目前还是没有太多的公司在使用啊。。。
后面就可以用这个easy_install工具进行第三方库的下载了,比如我要下载soaplib这个库,可以执行easy_install soaplib,它会自己去相关网站查找这个库,以及这个库的依赖,如果你手工安装,那依赖会把你搞疯掉的(我就被折腾了1天多)
2.关于哪个库更适用做webservice
现在网上查到最多的是ZSI或者叫soappy,实际上05年之后就没有更新了,而且只支持到2.5,放弃
soaplib,这个目前2.0,还是不错的,不过手册不是太好读,只有server端的用法,client我没找到

suds,这个我在用,用起来比较简单,示例代码如下:

The library is now ready to use. We start by importing the suds library, creating a client based on a SOAP url, and asking the library to print the SOAP web service methods that are available to us.

import suds
url = "http://www.ecubicle.net/iptocountry.asmx?wsdl"
client = suds.client.Client(url)
print client


From the output of the last print command, we learn that there is a method called FindCountryAsString that takes one argument: the IP address.


print client.service.FindCountryAsString("194.145.200.104")
And it shows (edited for readability):

<?xml version="1.0"?>
<IPAddressService>
   <country>Netherlands</country>
</IPAddressService>


Normally you want to have the contents of the SOAP body. This is what suds provides in a very elegant way. However, you’re a bit stuck when you want to get something from the SOAP header. The author of suds realised this and made a backdoor to get the information anyway. We start by showing what the function last_received contains:


print client.last_received()
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope>
   <soap:Header>
      <ResponseHeader xmlns="">
         <resultCode>1000</resultCode>
         <resultDescription>Success</resultDescription>
      </ResponseHeader>
   </soap:Header>
   <soap:Body>
...
   </soap:Body>
</soap:Envelope>

We can get portions of this data by doing some XML handling. Let’s say we want to print the resultCode:

print client.last_received().getChild("soap:Envelope").getChild("soap:Header")
.getChild("ResponseHeader").getChild("resultCode").getText()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值