python開發Webservice服務端

2021-09-25 06:57:53 字數 3168 閱讀 3005

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

# 資料庫互動層,模擬乙個簡單的資料庫互動

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.******_server import make_server

server.serve_forever()

except importerror:

print 'error'

就能看到你的服務端已開啟,乙個xml的描述你web services功能的xml文件

環境:python2 

終端命令列: 

pip install suds

注意:python3.6的環境得安裝suds-jurko

pip install suds-jurko1

from suds.client import client

要訪問的webservice位址

url = 「

本地測試

url=「

建立webservice client物件

client = client(url)

print(client)可以列印出client物件所有的方法

print(client)

定義字段,傳送傳出去的字段

調取web service服務端的服務

result = client.service.make_func(item) 

print(result)

demo:

from suds.client import client

#要訪問的webservice位址

url = ""

#建立webservice client物件

client = client(url)

#print(client)可以列印出client物件所有的方法

#print(client)

#client.service.qqcheckonline方法

result = client.service.qqcheckonline("229151840")

用python客戶端去訪問webservice

在前幾篇文章裡面我重點用python去發布乙個webservice。我用的是soaplib庫。發布以後確實可以通過php來訪問,也可以通過python訪問,通過php訪問的話還好。但是通過python訪問的時候必須知道服務端的 這一點從官方給出的demo可以看出,這就比較煩人。所以我改用另外的乙個p...

樹莓派3 Python3呼叫Web Service

好奇樹莓派下python3是如何呼叫web service的。搜了一圈發現不少人用的suds,那我也來跟個風吧。sudo apt get install python3 suds 為了模擬單位裡生產環境的實際情況,分幾種情況試驗 web service是c 開發的 1 輸入輸出都是簡單型別 2 輸入...

18 webserv 流socket的應用

1 伺服器設計 學習了網路程式設計的基本操作和設計原則,建立乙個web伺服器,這是乙個典型的socket流的客戶端 伺服器系統。伺服器設立服務,然後進入迴圈接收和處理請求。客戶端連線到伺服器,然後傳送 接收或者交換資料,最後退出。該互動過程主要包含3個操作 2 建立伺服器socket 設立乙個服務一...