博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python开发Webservice服务端
阅读量:4088 次
发布时间:2019-05-25

本文共 3003 字,大约阅读时间需要 10 分钟。

Webservice

记录一下python开发 Web services跨平台,跨语言,跨设备之间的通信。

 

Web service 三要素

SOAP:SOAP协议 

WSDL:Web service描述语言,我的理解是:你服务端的接收字段,字段类型定义,定义的函数,函数名名以及返回的数据的一个描述XML格式 
XML: 
demo如下:

# coding: utf-8

import soaplib

import cx_Oracle as cx

 

from soaplib.core.server import wsgi

from soaplib.core.service import DefinitionBase

from soaplib.core.service import soap

from soaplib.core.model.clazz import Array

from soaplib.core.model.clazz import ClassModel

from soaplib.core.model.primitive import Integer,String, Double

from soaplib.core import Application

 

# 数据库交互层,模拟一个简单的数据库交互

class DBManage(ClassModel):

    reqNo       = ''

    paramOut    = []

 

    def __init__(self, reqNo):

        self.reqNo = reqNo

 

    def exeQuery(self):

        # Connect to database and query values

        conn = cx.connect('db tns connection string') #填写数据库连接字符串

        conn.begin() #开始事务

        print 'connected'

        cursor = conn.cursor()

        cursor.execute("""select 'Hello!' msg from dual""") #查询示例

        rs = cursor.fetchone()

        rtnMsg = rs[0] 

        print rtnMsg # Hello!

 

        self.paramOut = [rtnMsg]

 

        conn.commit()  #提交事务

        cursor.close() #关闭资源

        conn.close()   #关闭连接

 

 

# 请求信息类

class TestRequestInfo(ClassModel):

    __namespace__ = "TestRequestInfo"

    reqNo           = String

 

 

# 返回信息类

class ResultInfo(ClassModel):

    __namespace__ = "ResultInfo"

    reqNo         = String

    resMsg        = String

 

# 请求方法

def exeRules(reqInfo):

    reqNo = reqInfo.reqNo

 

    # Query Database and get values

    dm = DBManage(reqNo)

    dm.exeQuery()

    rs = dm.paramOut

    print 'dm invoke ok!'

 

    resInfo = ResultInfo()

    resInfo.reqNo  = reqNo

    resInfo.resMsg = rs[0]

 

    #print resInfo

    return resInfo

 

 

class TestService(DefinitionBase):  #WebService Method

    @soap(TestRequestInfo,_returns=ResultInfo)

    def getResultInfo(self,reqInfo):

        resInfo = ResultInfo()

        resInfo = exeRules(reqInfo)

        #print resInfo

        return resInfo

 

 

if __name__=='__main__':

    try:

        print '服务已启动'

        from wsgiref.simple_server import make_server

        soap_application = Application([TestService], 'tns')

        wsgi_application = wsgi.Application(soap_application)

        server = make_server('localhost', 8899, wsgi_application)

        server.serve_forever()

 

    except ImportError:

        print 'error'

 

运行本文件,在浏览器输入:https//127.0.0.1:6667/SServices/?wsdl

就能看到你的服务端已开启,一个xml的描述你Web services功能的xml文档

 

采用suds轻量级的python Web services 访问

环境:python2 

终端命令行: 
pip install suds

注意:python3.6的环境得安装suds-jurko

 

pip install suds-jurko1

from suds.client import Client

 

要访问的Webservice地址

url = “http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl”

 

本地测试

url=“http://127.0.0.1:6667/SServices/?wsdl”

 

创建Webservice Client对象

client = Client(url)

 

print(client)可以打印出Client对象所有的方法

print(client)

 

定义字段,发送传出去的字段

item={} 

item[‘name’]=’老王’ 
item[‘phone’]=‘xxxx’ 
item[“address]=’隔壁’ 
item[‘time’]=‘时间:半夜12点’ 
item[‘…’] =’…’

 

调取Web service服务端的服务

result = client.service.make_func(item) 

print(result)

demo:

from suds.client import Client

#要访问的Webservice地址

url = "http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"
#创建Webservice Client对象
client = Client(url)
#print(client)可以打印出Client对象所有的方法
#print(client)
#client.service.qqCheckOnline方法
result = client.service.qqCheckOnline("229151840")

print("QQ在线结果为:"+result)

 

 

 

 

 

 

转载地址:http://ccuii.baihongyu.com/

你可能感兴趣的文章
VUE面试题总结
查看>>
写好JavaScript条件语句的5条守则
查看>>
原生JS中DOM节点相关API合集
查看>>
【TINY4412】U-BOOT移植笔记:(7)SDRAM驱动
查看>>
【TINY4412】U-BOOT移植笔记:(12)BEEP驱动
查看>>
单链表的修改和删除
查看>>
C++的三个基本特征:封装、继承、多态
查看>>
C++虚函数的总结
查看>>
什么是URL地址?
查看>>
C++多态的实现方式总结
查看>>
学习C++需要注意的问题
查看>>
C++模板
查看>>
C++双冒号(::)的用法
查看>>
【Unity】封装SQLite管理类
查看>>
【Unity】面试题整理
查看>>
【C#】如何实现一个迭代器
查看>>
【Unity】Destroy和DestroyImmediate的区别
查看>>
【Lua】Mac系统下配置SublimeText的Lua编译环境
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
【Unity】微信登录后将头像存为bytes,将bytes读取成sprite图片
查看>>