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 設立乙個服務一...