[Python]webservice 学习(1) -- 简单服务和调用
来源:互联网 发布:网络综艺点击量 编辑:程序博客网 时间:2024/04/29 14:47
由于项目中需要用到webservice来做接口,于是花点时间先做知识储备。
开始的时候觉着这个webservice就是一个http请求啊,服务端监听,客户端发送xml报文,然后解析下发送了什么内容,返回响应的数据。
这是百度百科对webservice的定义,一般使用wsdl来描述服务。
后来我的误区就是 wsdl的xml 和 用http 请求组成的xml也就是用soap来请求webservice, 这两种xml为啥不一样。。。
困惑:
看了些资料以后才明白,wsdl就是你发布的webservice的描述文档,他就是来描述这个webservice接口怎么定义的,有那些方法,怎么调用,需要那些参数等等吧.
而soap 里的xml只是使用了这种协议来调用webservice接口的一种方法,其实还可以使用别的协议来调用webservice接口,所有soap和webservice不是一回事,某些程度上说是两种不同的东西。
服务端:
服务端使用的是soaplib (2.0.0-beta2)这个包,当然还有其他的几种可以参照so上的这个回答
例子是文档中最简单的案例: 文档地址
#coding: utf-8__author__= 'orangleliu'__version__ = '0.1''''filename: soaplib_test.pycreatedate: 2014-05-10comment: webservice 简单学习这是官网的一个demo 调试看看参考链接:http://soaplib.github.io/soaplib/2_0/pages/helloworld.html#declaring-a-soaplib-servicehttp://www.cnblogs.com/grok/archive/2012/04/29/2476177.html直接执行pyhton文件就可以把webservice启动了服务启动之后可以在浏览器: http://localhost:7789/?wsdl得到一个xml文件,具体怎么解读还需要查看资料需要研究下怎么手动写一个http客户端来请求webservice'''import soaplibfrom soaplib.core.service import rpc, DefinitionBase, soapfrom soaplib.core.model.primitive import String, Integerfrom soaplib.core.server import wsgifrom soaplib.core.model.clazz import Arrayclass HelloWorldService(DefinitionBase): @soap(String,Integer,_returns=Array(String)) def say_hello(self,name,times): results = [] for i in range(0,times): results.append('Hello, %s'%name) return resultsif __name__=='__main__': try: from wsgiref.simple_server import make_server soap_application = soaplib.core.Application([HelloWorldService], 'tns') wsgi_application = wsgi.Application(soap_application) server = make_server('localhost', 7789, wsgi_application) print 'soap server starting......' server.serve_forever() except ImportError: print "Error: example server code requires Python >= 2.5"
直接使用python 就可以启动服务了
浏览器访问http://localhost:7789/?wsdl 可以看到这个接口的wsdl描述文档
服务器端也可以看到访问日志输出:
PS D:\CodeHouse\python\web\webservice> python .\soaplib_test.pysoap server starting......127.0.0.1 - - [17/May/2014 15:27:45] "GET /favicon.ico HTTP/1.1" 405 0127.0.0.1 - - [17/May/2014 15:27:45] "GET /?wsdl HTTP/1.1" 200 2679127.0.0.1 - - [17/May/2014 15:27:45] "GET /favicon.ico HTTP/1.1" 405 0
客户端:
官方的这个小案例是使用suds这个webservice轻客户端来访问的
import loggingfrom suds.client import Clientif __name__ == '__main__': logging.basicConfig(level=logging.INFO) logging.getLogger('suds.client').setLevel(logging.DEBUG) hello_client = Client('http://localhost:7789/?wsdl', cache=None) result = hello_client.service.say_hello("Dave", 5) print result
返回的结果
(stringArray){ string[] = "Hello, Dave", "Hello, Dave", "Hello, Dave", "Hello, Dave", "Hello, Dave", }
其实从这个小的案例可以看出来,如果两边都使用python的插件还是挺简单的,甚至不需要知道wsdl是什么就可以很好的调用webservice接口。
但是我想使用http来组成soap消息访问这个接口就需要研究下了。(wsdl只是简单的看了下结构,还是不怎么理解)
2 1
- [Python]webservice 学习(1) -- 简单服务和调用
- python远程调用webservice服务
- 简单webservice服务创建并调用
- servlet简单示例+调用webservice服务
- WebService服务及客户端调用简单实例
- 调用webservice服务(一) 学习笔记
- Python安装cx_Oracle模块和suds.client模块调用webservice服务
- WebService学习2:服务端发布服务、客户端调用服务
- WebService的java简单创建和调用
- Java调用WebService服务,简单好用,实例讲解
- WebService系列博客{一}[发布、调用一个简单的服务]
- 动态调用WebService服务
- 动态调用webservice服务
- delphi调用webservice服务
- js调用WebService服务
- windows服务调用WebService
- ajax调用WebService服务
- ADF调用WebService服务
- OpenGL ES 纹理图片解析第一波 - 无耐地放弃重写这一部分
- 安装和运行Maven
- JavaScript兼容问题汇总[实时更新]
- 当小米遇上“泄密门”,用户隐私谁来保护???
- jquery水平滑动tab选项卡
- [Python]webservice 学习(1) -- 简单服务和调用
- hdu 1864(最大报销额)——01背包
- opencV源码分析之HOG
- android Intent
- 区别adb logcat 与 adb logcat -b main
- Android Intent传递对象小结
- libgdx的目录结构 以及常见接口
- 实战--积分投票系统血泪教训
- throw和throw ex的区别