python通过webservice接口实现配置下发
项目上要开发一个小工具,通过webservice接口实现配置下发,考虑到python的第三方库对soap的良好支持,果断决定用python来完成这一使命。
Python的支持webservice的第三方库是suds,官网上给出了详细用法说明,初始化如下
from suds.client import Client
url = 'http://localhost:7080/webservices/WebServiceTestBean?wsdl'
client = Client(url)
print client
打印后可见到wsdl文档的所有方法和数据类型,调用具体方法的操作很简单:
client.service.methodName()
然后就和调用普通函数一样的传参和使用函数提供的功能即可。
使用print client.last_received()函数可以看到收到的soap协议内容
但实际应用中,碰到了几个问题:
1、wsdl文档不是放在网络服务端,或为了隐藏wsdl的远程访问地址,把wsdl文档放在本地,对于本地,url处填写的方式为(以放在C盘为例):
url='file:\\\c:\test.wsdl'
2、仅仅调用服务的方法是非常简单,但实际应用中,所用到的方法参数往往非常复杂,有些是自定义的数据类型,类似于结构体,我用到的方法,更离谱的是结构体中还包含自定义数据类型的结构体。直接调用client.service.method来传参数肯定是不行了,参数类型的问题就没法解决。
怎么办呢?suds提供了非常好的解决办法,使用factory工厂对象来初始化对象实例。使用client.factory.create函数创建对象实例后,直接对实例的参数进行初始化。更详细的说明需参考官方文档,本人使用的代码段贴出如下:
def structParamSetting(ParamID,ColumnParamID,RowID,ParamValue,OperType):
ParamItem=client.factory.create('SetParamItem')
GWParamValue=client.factory.create('ParamValue')
GWParamValue.ParamID=ParamID
GWParamValue.ColumnParamID=ColumnParamID
GWParamValue.RowID=RowID
GWParamValue.ParamValue=ParamValue
ParamItem.OperType=OperType
ParamItem.ValueInfo=GWParamValue
return ParamItem
参数结构为ParamItem为自定义数据类型,其中包含ValueInfo和OperType两个字段,ValueInfo又为GWParamValue自定义数据类型,其中包含ParamID,ColumnParamID,RowID,ParamValue这几个字段。
使用factory完美解决了传复杂参数的问题。
主要的难点在于这两处,其他的都属于逻辑和算法优化问题,此处不述。
python通过webservice接口实现配置下发的更多相关文章
- 用Python写WebService接口并且调用
一.用ladon框架封装Python为Webservice接口 另用soaplib实现请看: http://www.jianshu.com/p/ad3c27d2a946 功能实现的同时,希望将接 ...
- 用ladon框架封装Python为Webservice接口以及调用接口的方法
一.用ladon框架封装Python为Webservice接口 功能实现的同时,希望将接口开放给别人,而封装python接口的一个再简单不过的框架Ladon,而且提供不同的协议,包括SOAP和Json ...
- 关于python测试webservice接口的视频分享
现在大公司非常流行用python做产品的测试框架,还有对于一些快速原型产品的开发也好,很好地支持OO编程,代码易读.Python的更新挺快的,尤其是第三方库. 对于测试人员,代码基础薄弱,用pytho ...
- webService 接口调用配置
1.配置XML文件,如果新建一个XML文件需要在applicationContext.xm里面配置一下 <import resource="cxf-client.xml" / ...
- python调用webservice接口
使用suds这个第三方模块 from suds.client import Clienturl = 'http://ip:port/?wsdl'cilent=Client(url)print cile ...
- python开发笔记-python调用webservice接口
环境描述: 操作系统版本: root@9deba54adab7:/# uname -a Linux 9deba54adab7 --generic #-Ubuntu SMP Thu Dec :: UTC ...
- Python的Web编程[2] -> WebService技术[0] -> 利用 Python 调用 WebService 接口
WebService技术 / WebService Technology 1 关于webservice / Constants WebService是一种跨编程语言和跨操作系统平台的远程调用技术. W ...
- python测试webservice接口
1.下载库:https://pypi.python.org/pypi/suds-jurko 2.解压后,进入到解压目录,安装库:python3 setup.py install 3.测试获取手机归属地 ...
- python编写webservice接口
1.pip install suds-jurko 2.pip install client #coding=utf-8 from suds.client import Client class Web ...
随机推荐
- CTS/GTS 常见问题解答
1.android.security.cts.PackageSignatureTest测试fail(MTK平台) 原因:由于用的是google default key而导致的fail,需要自己定义re ...
- spark三种连接Join
本文主要介绍spark join相关操作. 讲述spark连接相关的三个方法join,left-outer-join,right-outer-join,在这之前,我们用hiveSQL先跑出了结果以方便 ...
- Leetcode题解(29)
93. Restore IP Addresses 题目 分析:多重循环,判断小数点合适的位置 代码如下(copy网上) class Solution { public: vector<strin ...
- Color the Ball(懵逼题)
Color the Ball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 新增加的HTTP状态码 -- 103
IETF公布了新的HTTP状态码-103, 总结一下就是提前预加载(css.js)文档,提升用户的访问速度. Summary: a new status code that lets the serv ...
- js判断对象为空 JSON.stringify(obj)
JSON.stringify(obj) : 用于从一个对象解析出字符串 var c = {}; if(JSON.stringify(obj) == "{}"){ console.l ...
- 掌握numpy(四)
数组的累加(拼接) 在前面讲了使用切片方法能够对数组进行切分,使用copy对切片的数组进行复制,那么数组该如何拼接呢? a1 = np.full((2,3),1)#填充数组 a2 = np.full( ...
- (转)Ubuntu 12.04 中安装和配置 Java JDK
http://www.cnblogs.com/bluestorm/archive/2012/05/10/2493592.html 先去 Oracle下载Linux下的JDK压缩包,我下载的是jdk-7 ...
- Hi3518EV200平台ADC多通道采样
Hi3518EV200平台ADC多通道采样流程 Hi3518EV200 ADC 本文针对Hi3518EV200平台处理器,通过ADC单次采样方式,实现对多通道(1~4通道)ADC进行采样控制.本文仅仅 ...
- jq获取浏览器的高度
// console.log("2-"+$(window).height()); //浏览器当前窗口可视区域高度 // console.log("3-"+$(d ...