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 ...
随机推荐
- bug:翻页
本章主要分享下,个人测试经历中遇见过的翻页bug 一.列表翻页 1.bug1:去请求翻页page=0,从0页开始算.一般来说page=0 和 page=1的数据是一模一样,所以翻第2页时会发现和第1页 ...
- angular指令中@,=,&的区别
当directive中的scope设置为一个对象的时候,该指令就有了一个独立的作用域,AngularJS提供了一种绑定策略用于隔离作用域和外部作用域进行通信. 1.@(or @attr) 使用@符号可 ...
- SE6新特性之集合Set、Map、WeakSet和WeakMap详解
SE5的时候我们经常用数组或者类数组对象来操作数据,而对于一些使用惯了java之类语言的集合的开发人员来说,总有少了点什么的感觉,SE6提供Set和Map这两个集合.不仅从根本上为一些问题提供了解决方 ...
- spark在yarn-cluster模式,错误查找方法
yarn logs -applicationId application_xxxx_xxx 可选(">exception")
- 使用Git 本地代码提交到 GitHub
第一步:下载Git 工具 在官网下载 https://git-scm.com/ 第二部:注册官方账号 创建一个村代码的仓库 注册地址https://github.com/ 第三部:本地代码 通过Git ...
- SQLAlchemy复杂查询
最近个人用python + flask搞了一个小项目,ORM用到的是SQLAlchemy. SQLAlchemy的查询方式非常灵活,你所能想像到的复杂SQL 语句,基本上都可以实现.这里简单的总结 ...
- Problem F: 多少个最大值?
Description 输入若干个int类型的整数,求它们的最大值及其个数. Input 输入 若干个int类型的整数,至文件尾为止. Output 输出只有一行:There are # maximu ...
- 享受Python和PHP动态类型检查语言的快感
前言 写这文章的时候特地查了资料,以确保我没有说错关于Python和PHP的类型机制. 所以这里放一张图,关于强弱类型与动态/静态类型检查的区分 从分类上看,PHP属于弱类型语言,而Python属于强 ...
- layui + jfinal 实现上传下载
1.需要把jfinal的环境配置好 2.导入相关的库文件 layui的库文件 就是这两个文件需要导入到自己的页面 注意:jfinal总会把路径拦截,所以需要静态文件处理.本人不太懂.就网上找了下,说w ...
- Lucene搜索引擎例子demo
一.导入相应的jar包 KAnalyzer3.2.0Stable.jar lucene-analyzers-3.0.1.jar lucene-core-3.0.1.jar lucene-highlig ...