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

由于项目中需要用到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只是简单的看了下结构,还是不怎么理解)

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

时间: 2024-10-24 06:19:17

[Python]webservice 学习(1) -- 简单服务和调用的相关文章

[Python]webservice学习(2) --自己写soap消息请求服务

上文中webservice学习(1) ,使用soaplib建立了一个超简单的webservice服务,也是用suds调用成功了,那如果想使用http包自己组成一个soap消息来调用接口怎么办呢? 这个时候我们就想到使用wsdl这个文件了,我看了些wsdl的文档,也参照这其他人使用java,php等语言实现的soap消息调用的格式来写,但是怎么调试都没成功.. 就是说他总是会返回500或者是405各种错误,就是下面代码中的old_soap_body 变量中的消息格式. #coding: utf-8

[Python]webservice 学习(4) -- Django+soap

前面学习使用soaplib搭建基于soap的webservice服务,我这个web项目其实只是要提供一两个webservice接口,如果直接写两个脚本外挂感觉挺麻烦,于是想能不能和web框集成到一起.于是在google上搜索,最后在github上找到了这么一段代码,原文地址为https://gist.github.com/rotaris/935809,于是我写简单写了一个demo放到了github上.代码上没有什么变化,只是直接创建了一个小项目,也许能容易看. 项目地址为: https://gi

Python 爬虫学习3 -简单抓取小说网信息

小说网 https://www.qu.la/paihangbang/ 功能:抓取每个排行榜内的小说名和对应链接,然后写入excel表格里面. 按F12 审查页面元素可以得到你所要的信息的class,从而来定位. 具体看代码讲解吧. #coding:utf-8 #为了正常转码 必写 import codecs #为下面新建excel,转码正确准备得一个包 __author__ = 'Administrator' import requests from bs4 import BeautifulSo

WebService学习总结(四)——调用第三方提供的webService服务

WebService学习总结(四)——调用第三方提供的webService服务 互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为例进行说明. 气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server), 而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client).一. 调用

一个简单的Webservice的demo,简单模拟服务

前段时间一直在学习WCF,匆匆忙忙的把<WCF全面解析>和<WCF服务编程>看了一遍,好多东西都不是很懂,又听了一下WCF分布式开发的网络教程,算是马马虎虎的明白点了.回顾了一下Webservice,将二者进行比较学习.考虑到以后的发展,当时决定学习WCF,希望自己在不久的将来能将WCF学的稍微精通点吧.这几天又将Webservice看了一遍,回想当时学习Webservice处处碰到坑,由于没人指点,连最基本地点发布都折腾好长时间,只能一点一点的填坑跳坑.这几天闲了,想写一个简单的

Android使用ksoap2-android调用WebService学习

转自 Android使用ksoap2-android调用WebService学习 之前主要做客户端UI交互,很少处理数据和接触服务端,但现在的移动设备根本不可能离得开网络连接,数据的交换.最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台.不同语言.不同技术整合到一块,android SDK没有直接调用webservice的库,最常用的是借助ksoap

C#程序员学习Android开发系列之调用WebService

我在学习Android开发过程中遇到的第一个疑问就是Android客户端是怎么跟服务器数据库进行交互的呢?这个问题是我当初初次接触Android时所困扰我的一个很大的问题,直到几年前的一天,我突然想到WebService是否可以呢?让WebService充当服务器端的角色,完成与服务器数据库操作相关的事情,而Android客户端只要按照WebService方法参数的要求去调用就行了.在当时我对这个解决方案的实现还没模糊,我想这个问题也是初学Android的朋友肯定会想到的问题.那么现在就让我们动

loadrunner做webservice接口之简单调用

今天听大神讲了webservice做接口,我按照他大概讲的意思自己模拟实战了下,可能还有很多不对,一般使用webservice做接口,会使用到soapui,但是用了loadrunner以后发现lr很快捷和简单,如下: 准备webservice测试接口,我用的是天气预报的接口,地址:http://ws.webxml.com.cn/  天气预报接口地址:http://ws.webxml.com.cn/webservices/DomesticAirline.asmx?wsdl,地址可以打开就能看到他的

为什么Python比Java简单呢?Python值得学习吗?

编程行业中有很多编程语言,而Python在近几年的呼声是非常高的,很多刚刚起步想要进入学习编程的新手都会犹豫要不要学习Python,毕竟人工智能.数据分析的首选语言就是Python,为什么Python要比Java简单在哪呢?今天就给大家详细的说说. Python比Java简单真的简单吗? 首先说说Java,Java是一种严格的类型语言,意味着必须声明变量名,相对比之下,动态类型的Python就不需要声明变量.在编程语言上有许多关于动态和静态的争论,不过Python是一种语法简单功能强大的编程语言