[Python]webservice 学习(1) -- 简单服务和调用

原创 2014年05月17日 15:34:58

由于项目中需要用到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.py
createdate: 2014-05-10
comment: webservice 简单学习

这是官网的一个demo  调试看看
参考链接:
http://soaplib.github.io/soaplib/2_0/pages/helloworld.html#declaring-a-soaplib-service
http://www.cnblogs.com/grok/archive/2012/04/29/2476177.html

直接执行pyhton文件就可以把webservice启动了
服务启动之后可以在浏览器: http://localhost:7789/?wsdl
得到一个xml文件,具体怎么解读还需要查看资料

需要研究下怎么手动写一个http客户端来请求webservice
'''
import soaplib
from soaplib.core.service import rpc, DefinitionBase, soap
from soaplib.core.model.primitive import String, Integer
from soaplib.core.server import wsgi
from soaplib.core.model.clazz import Array


class 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 results

if __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.py
soap server starting......
127.0.0.1 - - [17/May/2014 15:27:45] "GET /favicon.ico HTTP/1.1" 405 0
127.0.0.1 - - [17/May/2014 15:27:45] "GET /?wsdl HTTP/1.1" 200 2679
127.0.0.1 - - [17/May/2014 15:27:45] "GET /favicon.ico HTTP/1.1" 405 0


客户端:

官方的这个小案例是使用suds这个webservice轻客户端来访问的

import logging
from suds.client import Client

if __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只是简单的看了下结构,还是不怎么理解)




版权声明:本文为orangleliu (http://blog.csdn.net/orangleliu/)原创文章,自由传播,文章转载请声明, 多谢。

Python开发Webservice(SOAP)

库的选择 针对Python的WebService开发,开发者讨论最多的库是soaplib(官方地址:http://soaplib.github.io/soaplib/2_0/index.html),但...
  • fengqingting2
  • fengqingting2
  • 2016年01月12日 10:53
  • 13188

应用Python开发WebService服务端及客户端

使用Python来开发WebService,实现服务端、客户端,及完成接口调用。
  • pierre_
  • pierre_
  • 2015年04月24日 18:26
  • 9241

Python webservice

Python WebServicesPython作为客户端访问WebService,推荐使用suds来完成suds官方Document: https://fedorahosted.org/suds/...
  • shfscut
  • shfscut
  • 2016年11月25日 15:34
  • 301

Python webservice 得到天气状态

webservice提供方: http://www.webxml.com.cn/zh_cn/web_services.aspx   天气预报webservice: http:/...
  • u011286208
  • u011286208
  • 2015年07月28日 13:33
  • 889

python 调用webservice两种方式

webservice提供方: http://www.webxml.com.cn/zh_cn/web_services.aspx   天气预报webservice: http:/...
  • cw123458945
  • cw123458945
  • 2012年11月04日 22:37
  • 21934

Windows下用Python实现WebService

今天想用python实现一个简单的WebService应用,从网上找了很多资料,却不能顺利配置工作环境,不过经过半天的努力,还是顺利解决各种Bug,记录一下。 工作环境:Win7(64bit) + ...
  • snoop_lttx
  • snoop_lttx
  • 2016年12月15日 19:24
  • 955

用python客户端去访问webservice

在前几篇文章里面我重点用python去发布一个webservice。我用的是soaplib库。发布以后确实可以通过php来访问,也可以通过python访问,通过php访问的话还好。但是通过python...
  • jjwspj
  • jjwspj
  • 2012年10月18日 18:09
  • 1110

Python自带web服务器尝试使用

尝试使用Python自带的Web服务器+PythonCGI的方式 1.在d盘建立一个Cgi-bin目录 2.在命令行中进入D:C:\Users\XXX>D: D:\>python -m https...
  • Han_L
  • Han_L
  • 2017年12月19日 15:42
  • 209

java调用python的webservice

这次出差,我接触最多的是spss,由于项目基于j2ee开发,而java又不能直接取得spss统计结果,好在spss对python的支持还行,最终成功实现了这个模块。感谢前辈们做出的贡献,没有你们,我就...
  • lifaming15
  • lifaming15
  • 2007年12月11日 17:27
  • 3377

python仅作为客户端调用webservice

对于python仅作为客户端调用webservice的情况,推荐使用suds库来完成,比起zsi,soapy之类,它可以说是相当轻量级,使用非常方便。...
  • liuzhixiong1992
  • liuzhixiong1992
  • 2014年07月23日 13:53
  • 1375
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Python]webservice 学习(1) -- 简单服务和调用
举报原因:
原因补充:

(最多只允许输入30个字)