一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

基于soap協(xié)議使用python模擬短信網(wǎng)關(guān)

 henan2000 2011-11-18

基于soap協(xié)議使用python模擬短信網(wǎng)關(guān)

問題1:soap協(xié)議是有什么作用?

答:soap提供了一種標(biāo)準(zhǔn)的方法,使得運行在不同的操作系統(tǒng)并使用不同的技術(shù)和編程語言的應(yīng)用程序可以互相進(jìn)行通信。

用一個簡單的例子來說明soap使用過程,一個soap消息可以發(fā)送到一個具有Web Service功能的Web站點。

例如:一個含有房價信息的數(shù)據(jù)庫,消息的參數(shù)中標(biāo)明這是一個查詢消息,此站點將返回一個XML格式的信息,其中包含了查詢

結(jié)果(價格,位置,特點,或者其它信息)。由于數(shù)據(jù)是用一種標(biāo)準(zhǔn)化的可分析的結(jié)構(gòu)來傳遞的,所以可以直接被第三方站點所

利用。

 

問題2:如何實現(xiàn)soap?

答:

簡單理解,開放協(xié)議soap=rpc+http+xml,采用http作為底層通訊協(xié)議;rpc作為一致性的調(diào)用途徑;xml作為數(shù)據(jù)傳送的格式。

 

問題3:如何使用python實現(xiàn)基于soap協(xié)議的短信網(wǎng)關(guān)Web Service?

答:

Service

是使用soaplib搭建。

sudo apt-get install libxml2-dev

sudo apt-get install libxslt-dev

pip install soaplib

 

soaplib2.0.0.beta1

官網(wǎng):http://soaplib.github.com/soaplib/2_0/

 

python實現(xiàn)soap協(xié)議的server.py

 

Python代碼 復(fù)制代碼 收藏代碼
  1. import soaplib   
  2. from soaplib.core.service import rpc, DefinitionBase, soap   
  3. from soaplib.core.model.primitive import String, Integer   
  4. from soaplib.core.server import wsgi   
  5. from soaplib.core.model.clazz import Array   
  6.   
  7. useridDict = {"Jack":"123456"}   
  8.   
  9. def recordSM(tos, msg, time):   
  10.     _recordFile = open("../resource/sm"'a')   
  11.     _recordString = 'to:%s msg:%s time:%s\n' % (tos, msg, time)   
  12.     _recordFile.write(_recordString)   
  13.     _recordFile.close()   
  14.        
  15. class IsmgService(DefinitionBase):  
  16.     @soap(String, String, String, String, String, _returns=String)   
  17.     def sendSms(self, userid, password, mobiles, msg, time):   
  18.         if useridDict.has_key(userid):   
  19.             if useridDict[userid] == password:   
  20.                 recordSM(mobiles, msg, time)   
  21.                 return 'success'  
  22.         return 'lose'  
  23.   
  24. if __name__=='__main__':   
  25.     try:   
  26.         from wsgiref.simple_server import make_server   
  27.         soap_application = soaplib.core.Application([IsmgService], 'tns')   
  28.         wsgi_application = wsgi.Application(soap_application)   
  29.         server = make_server('localhost'7789, wsgi_application)   
  30.         server.serve_forever()   
  31.     except ImportError:   
  32.         print "Error: example server code requires Python >= 2.5"  
 

 

Client

官網(wǎng):https:///suds/

svn co http://svn./svn/suds/trunk

pip install .

python實現(xiàn)的client

 

Python代碼 復(fù)制代碼 收藏代碼
  1. from suds.client import Client   
  2. client = Client('http://localhost:7789/?wsdl')   
  3. userid = 'Jack'  
  4. password = '123456'  
  5. mobiles = '13812345678'  
  6. msg = 'hello world!'  
  7. time = '2011-03-01'  
  8.   
  9. result = client.service.sendSms(userid, password, mobiles, msg, time)   
  10.   
  11. print result  
 

 

備注:

出現(xiàn)錯誤 URLError:<urlopen error[Error -2]> name or service not know

產(chǎn)生的原因 在不能與外網(wǎng)通信的情況下,soaplib和suds.client要去請求www.進(jìn)行校驗

解決方案:

把soaplib自動生成的wsdl保存到本地,去掉<xs:import namespace="http://www./2001/XMLSchema" />,用python -m SimpleHTTPServer起一個Http server

例如http://127.0.0.1:7788/wsdl,Client去引用這個URL,如Client('http://localhost:7788/wsdl')

 

問題4:什么是wsdl?

答:是基于XML的用于描述Web Services以及如何訪問Web Services的語言。

這種文檔可描述某個Web Services。它可規(guī)定服務(wù)的位置,以及此服務(wù)提供的操作(或方法)。

 

<portType> web service 執(zhí)行的操作

它可描述一個web service, 可被執(zhí)行的操作,以及相關(guān)的消息

可以把<portType>元素比作一個函數(shù)庫

 

<message> web service 使用的消息

每個消息均由一個或多個部件組成??梢园堰@些部件比作一個函數(shù)調(diào)用的參數(shù)

 

<types> web service 使用的數(shù)據(jù)類型

為了最大程度的平臺中立性,wsdl使用xml Schema語法來定義數(shù)據(jù)類型

 

<binding> web service 使用的通信協(xié)議

為每個端口定義消息格式和協(xié)議細(xì)節(jié)

binding元素有兩個屬性-name屬性和type屬性

name屬性定義binding的名稱,而type屬性指向用于binding的端口。

 

具體作用:

1.服務(wù)做些什么--服務(wù)所提供的操作(方法)

2.如何訪問服務(wù)--和服務(wù)交互的數(shù)據(jù)格式以及必要協(xié)議

3.服務(wù)位于何處--協(xié)議相關(guān)的地址,如URL

 

portType(與message和type元素的細(xì)節(jié)相結(jié)合)描述了Web服務(wù)是什么,binding元素描述了如何使用Web服務(wù),port及service元素描述了Web服務(wù)的位置。

 

使用方式:

可以根據(jù)wsdl反向生成客戶端代碼,如python的suds.client庫

是可以通過瀏覽器去訪問的,但是需要wsdl文檔支持。例如:URL是http://xxx/method?arg1=xx&arg2=xx

 

備注:

 

webService協(xié)議主要包括兩個方面:傳輸協(xié)議和數(shù)據(jù)表示,關(guān)于傳輸協(xié)議可以是http或其它,數(shù)據(jù)表示也可以是鍵值對,xml或者其它。

 

問題5:什么是wsgi?

答:

wsgi的全寫是Web Server Gateway interface。定義一個標(biāo)準(zhǔn)的溝通方式,讓你寫的程序可以

和服務(wù)器溝通,但是wsgi不是設(shè)計用來給任何語言使用的,它是設(shè)計給python用的。wsgi透過環(huán)

境變量來取得信息,例如request_method,server_name,http_xxx。

 

實例展示:

 

Python代碼 復(fù)制代碼 收藏代碼
  1. from wsgiref.simple_server import make_server   
  2.   
  3. def my_app(environ, start_response):   
  4.     status = '200 OK'  
  5.     response_headers = [('Content-type''text/plain')]   
  6.     start_response(status, response_headers)   
  7.     return [u"你好! 歡迎來到Victor的第一個WSGI程式".encode('utf8')]   
  8.     
  9. httpd = make_server(''8000, my_app)   
  10. print "Serving on port 8000..."  
  11. httpd.serve_forever()  

 

 wsgiref是python內(nèi)建模塊,通過瀏覽器訪問http://127.0.0.1:8000

 

利用wsgi你可以寫一個Middleware

 

Python代碼 復(fù)制代碼 收藏代碼
  1. from wsgiref.simple_server import make_server   
  2.   
  3. def my_app(environ, start_response):   
  4.     status = '200 OK'  
  5.     response_headers = [('Content-type''text/plain')]   
  6.     start_response(status, response_headers)   
  7.     return ['hello world']   
  8.     
  9. class Middleware(object):   
  10.     def __init__(self, app, encoding='utf8'):   
  11.         self.app = app   
  12.         self.encoding = encoding   
  13.            
  14.     def __call__(self, environ, start_response):   
  15.         content = self.app(environ, start_response)   
  16.         for item in content:   
  17.             if item == 'hello world'return 'Hi!'  
  18.         return "hi!"  
  19.   
  20. app = Middleware(my_app)   
  21. httpd = make_server(''8000, app)   
  22. print "Serving on port 8000..."  
  23. httpd.serve_forever()  

 

wsgi帶來的好處:

最簡單的網(wǎng)頁程序做的事情就使用者發(fā)送一個request到你的服務(wù)器,接著你的程序產(chǎn)生內(nèi)容,然后送出response回去給Browser。

復(fù)雜的事情如:session,cookie,認(rèn)證,錯誤處理,而wsgi的Middleware將這些該做的事情限定于Middleware中,它們跟上下

游溝通都是按標(biāo)準(zhǔn)來實現(xiàn),這些Middleware都能重復(fù)被利用。

 

詳細(xì)描述整個請求過程:

首先,經(jīng)過Registry Manager是用來管理request-local的相關(guān)物件。

接著,Status Code Redirect在Request上不做任何事情。

往下層跑,ErrorHandler也是不對Request做任何事。

接著,Cache Middle,視情況記錄Request相關(guān)內(nèi)容。

然后,是Session Middleware取出cookie還有在環(huán)境中準(zhǔn)備session的資料。

接著,Routes依網(wǎng)址決定要給那個Controller來處理。

最后,Request經(jīng)過層層關(guān)卡來到了真正的Pylons App,產(chǎn)生網(wǎng)頁結(jié)果,Response會一層一層被回傳回去。

到Cache有需要可以暫存下來,其中有例外拋出ErrorHandler會處理,Status Code Redirect可以重導(dǎo)頁面到特定的錯誤頁面

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    91免费一区二区三区| 日本一本不卡免费视频| 欧美不卡高清一区二区三区| 成人精品亚洲欧美日韩| 久久经典一区二区三区| 亚洲少妇一区二区三区懂色| 不卡免费成人日韩精品| 91久久精品在这里色伊人| 精产国品一二三区麻豆| 特黄大片性高水多欧美一级| 亚洲精品黄色片中文字幕| 色一情一伦一区二区三| 日本成人三级在线播放| 国产精品丝袜美腿一区二区| 欧美日韩欧美国产另类| 亚洲国产成人久久一区二区三区| 久久国产人妻一区二区免费| 日韩精品一区二区三区四区| 国产精品香蕉在线的人| 亚洲精品深夜福利视频| 亚洲av在线视频一区| 国产欧美日产中文一区| 欧美日韩久久精品一区二区| 日韩人妻av中文字幕| 国产精品成人免费精品自在线观看| 国产视频一区二区三区四区| 国产肥女老熟女激情视频一区 | 91人妻人澡人人爽人人精品| 成人精品日韩专区在线观看| 国产熟女一区二区不卡| 国产一区欧美一区二区| 久久三级国外久久久三级| 国产精品国产亚洲看不卡| 黄色片一区二区在线观看| 91欧美日韩精品在线| a久久天堂国产毛片精品| 暴力三级a特黄在线观看| 精品一区二区三区乱码中文| 男女午夜在线免费观看视频| 麻豆精品视频一二三区| 欧美野外在线刺激在线观看|