<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python中SOAP項目的介紹及其在web開發中的應用

        來源:懂視網 責編:小采 時間:2020-11-27 14:32:36
        文檔

        Python中SOAP項目的介紹及其在web開發中的應用

        Python中SOAP項目的介紹及其在web開發中的應用:SOAP.py 客戶機和服務器 SOAP.py 包含的是一些基本的東西。沒有 Web 服務描述語言(Web Services Description Language,WSDL)或者任何其它附加的東西,只有用 Python 實現的 SOAP 客戶機和服務器的透明支持。甚至這個包中的一個很好的功能也只是與基礎架構
        推薦度:
        導讀Python中SOAP項目的介紹及其在web開發中的應用:SOAP.py 客戶機和服務器 SOAP.py 包含的是一些基本的東西。沒有 Web 服務描述語言(Web Services Description Language,WSDL)或者任何其它附加的東西,只有用 Python 實現的 SOAP 客戶機和服務器的透明支持。甚至這個包中的一個很好的功能也只是與基礎架構

        SOAP.py 客戶機和服務器

        SOAP.py 包含的是一些基本的東西。沒有 Web 服務描述語言(Web Services Description Language,WSDL)或者任何其它附加的東西,只有用 Python 實現的 SOAP 客戶機和服務器的透明支持。甚至這個包中的一個很好的功能也只是與基礎架構相關:SOAP.py 支持安全套接字層(SSL)用于加密的 SOAP 傳輸。為使用這個功能,您必須安裝 M2Crypto,M2Crypto 是一個庫,包含各種加密工具和格式,從 RSA 和 DSA 到 HTTPs、S/MIME 等等。在這一部分,我們不準備討論 SOAP.py 的 SSL 支持。
        SOAP 操作摘要

        目前為止,SOAP 實用程序好象仍是比較流行的使用 Python 的開放源代碼活動。下面是該項目的綱要以及它們目前的狀態。首先,參與者:

      1. 4Suite SOAP,由 Fourthought 管理
      2. SOAPy,由 Adam Elman 管理
      3. SOAP.py,Python 項目的一個 Web 服務項目
      4. soaplib,由 Secret Labs 管理
      5. Orchard,由 Ken MacLeod 管理
      6. PySOAP,由 Dave Warner 管理
      7. 4Suite SOAP 是我們自己的實現,我們在本專欄的前面三部分中使用過(請參閱 參考資料以獲得它的鏈接)。它目前仍在開發中。

        SOAPy 是在 2001 年 4 月公布的,目前處于 alpha 的預備階段,但現在好象停止開發了。

        SOAP.py 開發被凍結了。SOAP.py 這個項目是由 actzero 公司贊助的,而 actzero 卻不再從事這一行業了。正在邀請自愿開發/維護 SOAP.py 的組織。

        soaplib 的開發好象也延緩了,考慮到 Secret Labs 這段時間所承擔的大量工作,或許就可以理解為什么會這樣了。這個瑞典的公司是由 Fredrik Lundh 掌管的,他在 Python 圈內是出名的“工作狂”,同時也是 Python Association 董事會的一名成員。Secret Labs 還開發 PythonWare(Python 的一個核心和重要的附加模塊);PythonWorks(一個領先的 Python IDE);Python Imaging Library 和許多其它好東西(日常 Python-URL Web 日志就是其中的一部分)。

        Orchard 是一個數據管理框架,基本上是一種用一個公共接口管理不同數據格式的方法。它實現了一個 SOAP 客戶機作為在遠程過程調用中向 SOAP 服務器發送 Orchard 數據項的基本方法(被稱為節點)。

        PySOAP 這個項目主要是想作為 Dave Warner 的 Church 管理套件的一部分,但它還從沒發行過任何文件,好象是一個毫無生氣的項目。

        安裝

        開始先下載分發包(在寫這篇文章的時候,SOAPpy 0.9.7 是最新的分發包),把文件解包,轉到結果目錄,并把文件 SOAP.py復制到自己傾向的位置。當然,這個“傾向”就是需要技巧的地方。由于這些 SOAP lib 中有很多都使用大小寫組合不同的“soap.py”作為模塊名,所以大家一定要小心。當然,UNIX 用戶只需關心大小寫是否精確匹配,但對于 Windows 用戶來說,甚至“SOAP.py”和“soap.py”之間的沖突也會帶來麻煩。Orchard 的 SOAP.py 也有一個容易發生沖突的名稱,但它有可能避開所有的問題,因為它的模塊聰明地放在了 Orchard 包中。

        上面的內容簡言之就是建議您確保安裝所有的 Python SOAP 模塊時都使用與眾不同的包名稱。在我們的案例中,我們在 PYTHONPATH 中發現了一個合適的目錄并創建了一個 WebServices 包,把 SOAP.py 放在了這個包中。因此,在 Linux 中:

        $ mkdir ~/lib/python/WebServices
        $ touch ~/lib/python/WebServices/__init__.py
        $ cp SOAPpy097/SOAP.py ~/lib/python/WebServices
        
        


        請注意很重要的第二條命令,它將生成一個 __init__.py 文件,這個文件將 WebServices 目錄標志為 Python 包。如果您需要把這些代碼打包成 Windows 版本,您可能希望向空文件中輸入一些注釋,因為一些 Windows 工具不創建空文件。

        您已深入主題了

        對于公開提供的 SOAP 服務器,早已經有了好幾個活動的注冊中心。最流行的可能是 XMethods。當然,它也是一個相當有趣的指導,通過它我們可以了解 SOAP 的實際狀況,而不要聽它的吹噓。這里的大多數公共 Web 服務仍然只是一些無關緊要的東西,幾乎不值得我們勇敢的新模型多費口舌,但那是另一回事了。實際上,我們將選擇一個公共服務來演示和測試如何把 SOAP.py 作為 SOAP 客戶機使用。

        或者,我們可以試試。作者嘗試的第一個服務,衛生保健提供者定位器,在遇到下列報錯消息時顯示 SOAP 互操作性的當前狀態中的陷阱:

        WebServices.SOAP.faultType: 
        
        


        哦。SOAPAction 是一個 HTTP 頭,應該是用來標記被訪問服務的。它是 SOAP 請求中必需的頭,但即便是設置了所需的頭(只是一對空的雙引號)后,上面的錯誤仍然存在。作者發現大多數 MS SOAP 實現都存在這個問題。在試遍了這些服務后,我們斷定,Delphi 實現好象與 SOAP.py 合作得最好,但在試服務時 — 即使是用 Delphi 實現時,也返回復雜的類型,比如列表,SOAP.py 無法使用它們,返回不帶數據的 WebServices.SOAP.typedArrayType 實例。

        最后,作者選擇了一個相當合適的 Web 服務,該服務返回漫畫《丁丁歷險記》中的人物 Haddock 船長常用的罵人語言(是的,大多數 Web 服務都是這樣)。 清單 1(curse.py)就是這個程序。

        清單 1:訪問 Curse 生成器 SOAP 服務的 SOAP.py 程序

         #!/usr/bin/env python
        #http://xmethods.net/detail.html?id=175
        import sys
        #Import the SOAP.py machinery
        from WebServices import SOAP
        remote = SOAP.SOAPProxy(
        "http://www.tankebolaget.se/scripts/Haddock.exe/soap/IHaddock",
         namespace="urn:HaddockIntf-IHaddock",
         soapaction="urn:HaddockIntf-IHaddock#Curse"
        )
        try:
         lang = sys.argv[1]
        except IndexError:
         lang = "us"
        result = remote.Curse(LangCode=lang)
        print "What captain Haddock had to say: "%s""%result
        
        


        把一切綜合在一起

        導入庫后,我們將設置代理對象 remote 。這個對象將方法調用轉換為遠程 SOAP 消息。它的初始化器使用管理遠程請求的關鍵參數: 服務器的 URI(被稱為“端點”)、請求元素的 XML 名稱空間(通過它,SOAP-as-RPC 將 口頭承諾變成 XML 基礎)和 SOAPAction 頭值。

        接下來,我們將確定方法參數,對于這個 Web 服務來說,方法參數只是 Haddock 罵人的語言,瑞典語(“se”)或英語(奇怪的是,是“us”而不是“en”)。

        最后,我們調用名稱正確的方法,代理對象的 Curse 進行 SOAP 調用,然后打印出結果。下面的會話演示了對該程序的使用:

        $ python curse.py
        What captain Haddock had to say: "Ectoplasmic Byproduct!"
        
        


        我們自己的 SOAP 服務器

        用 SOAP.py 實現 SOAP 服務器相當容易。作為一個示例,我們將仿建字段,還要實現一個很常見的服務:一個程序,給出年份和月份,它將以字符串的形式打印出日歷。它的程序服務器是 清單 2(calendar-ws.py)。

        清單 2:實現日歷服務器的 SOAP.py 程序

         #!/usr/bin/env python
        import sys, calendar
        #Import the SOAP.py machinery
        from WebServices import SOAP
        CAL_NS = "http://uche.ogbuji.net/eg/ws/simple-cal"
        class Calendar:
         def getMonth(self, year, month):
         return calendar.month(year, month)
         def getYear(self, year):
         return calendar.calendar(year)
        server = SOAP.SOAPServer(("localhost", 8888))
        cal = Calendar()
        server.registerObject(cal, CAL_NS)
        print "Starting server..."
        server.serve_forever()
        
        


        進行過必要的導入后,我們為自己的服務器定義 SOAP 請求元素期望的名稱空間( CAL_NS )。接下來我們定義實現所有方法的類,這些方法將被公開為 SOAP 方法。大家也可以把單個函數作為 SOAP 方法注冊,但使用類方法是最靈活的,特別是當您想管理調用間的狀態時。這個 Calendar 類定義了一個方法 getMonth ,該方法使用 Python 的內置日歷模塊在文本表單中返回月度日歷,同時它還定義了另一個返回整年日歷的方法。

        然后創建 SOAP 服務器框架的一個實例,這個實例還帶有偵聽端口 8888 的指令。我們還必須創建 Calendar 類的一個實例,這個實例在下一行中被注冊用來處理 SOAP 消息,同時為其指出相關的名稱空間。最后,我們調用 serve_forever 方法,該方法直到進程終止才返回。

        為運行服務器,請打開另一個命令 shell 并執行 python calendar-ws.py 。執行結束時使用 ctrl-C 殺死進程。

        我們本來可以用也是用 SOAP.py 寫的客戶機測試服務器,但那太顯而易見了。我們還是用低級 Python 編寫客戶機把 SOAP 響應作為 XML 字符串來構建,并發送一條 HTTP 消息。這個程序(testcal.py)在 清單 3中。

        清單 3:用 Python 核心庫寫的訪問日歷服務的客戶機

         import sys, httplib
        SERVER_ADDR = "127.0.0.1"
        SERVER_PORT = 8888
        CAL_NS = "http://uche.ogbuji.net/ws/eg/simple-cal"
        BODY_TEMPLATE = """
         
         
         %s
         %s
         
         
        """
        def GetMonth():
         year = 2001
         month = 12
         body = BODY_TEMPLATE%(year, month)
         blen = len(body)
         requestor = httplib.HTTP(SERVER_ADDR, SERVER_PORT)
         requestor.putrequest("POST", "cal-server")
         requestor.putheader("Host", SERVER_ADDR)
         requestor.putheader("Content-Type", "text/plain; charset="utf-8"")
         requestor.putheader("Content reply_body = requestor.getfi-Length", str(blen))
         requestor.putheader("SOAPAction", "http://uche.ogbuji.net/eg/ws/simple-car")
         requestor.endheaders()
         requestor.send(body)
         (status_code, message, reply_headers) = requestor.getreply()
        le().read()
         print "status code:", status_code
         print "status message:", message
         print "HTTP reply body:
        ", reply_body
        if __name__ == "__main__":
         GetMonth()
        
        


        下面的會話演示了這個測試的運行情況。

        $ python testcal.py
        status code: 200
        status message: OK
        HTTP reply body:
        <?xml version="1.0" encoding="UTF-8"?>
        
        
        
         December 2001
        Mo Tu We Th Fr Sa Su
         1 2
         3 4 5 6 7 8 9
        10 11 12 13 14 15 16
        17 18 19 20 21 22 23
        24 25 26 27 28 29 30
        31
        
        
        
        
        
        


        仔細審查的字節

        如果您查找行 self.debug = 0 并把“0”改為“1”(這是 SOAP.py 版本 0.9.7 中的第 210 行),有一件要注意的事情是您可以獲得被交換的實際 SOAP 消息的詳細信息和用于調試與跟蹤的其它關鍵數據,這對您很有用。作為示例,下面提供了一個會話,它是打開了調試信息顯示開關的以前的 curses.py 程序的一個會話:

        $ python curse.py 
        *** Outgoing HTTP headers **********************************************
        POST /scripts/Haddock.exe/soap/IHaddock HTTP/1.0
        Host: www.tankebolaget.se
        User-agent: SOAP.py 0.9.7 (actzero.com)
        Content-type: text/xml; charset="UTF-8"
        Content-length: 523
        SOAPAction: "urn:HaddockIntf-IHaddock#Curse"
        ************************************************************************
        *** Outgoing SOAP ******************************************************
        <?xml version="1.0" encoding="UTF-8"?>
        
        
        
        us
        
        
        
        ************************************************************************
        *** Incoming HTTP headers **********************************************
        HTTP/1.? 200 OK
        Server: Microsoft-IIS/5.0
        Date: Tue, 11 Sep 2001 16:40:19 GMT
        Content-Type: text/xml
        Content-Length: 528
        Content:
        ************************************************************************
        *** Incoming SOAP ******************************************************
        <?xml version="1.0" encoding="UTF-8"?>Anacoluthons!
        ************************************************************************
        What captain Haddock had to say: "Anacoluthons!"
        
        


        為進行比較,您可以在帶有下列代碼的舊的 Python 腳本或程序中獲得相同的信息:

        import calendar
        return calendar.month(2001, 10)
        
        


        SOAP.py 總結

        我們已經注意到了,雖然 SOAP.py 的互操作性還存在一些問題,但可用的調試工具可望提供幫助。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python中SOAP項目的介紹及其在web開發中的應用

        Python中SOAP項目的介紹及其在web開發中的應用:SOAP.py 客戶機和服務器 SOAP.py 包含的是一些基本的東西。沒有 Web 服務描述語言(Web Services Description Language,WSDL)或者任何其它附加的東西,只有用 Python 實現的 SOAP 客戶機和服務器的透明支持。甚至這個包中的一個很好的功能也只是與基礎架構
        推薦度:
        標簽: 開發 soap python
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 色噜噜综合亚洲av中文无码| av电影在线免费看| 国产成人综合久久精品亚洲| 9i9精品国产免费久久| 在线观看永久免费| 亚洲成年看片在线观看| 亚洲第一网站免费视频| 欧洲精品码一区二区三区免费看| 久久国产高潮流白浆免费观看| 免费一区二区三区四区五区| 亚洲春色在线观看| 国产色爽免费无码视频| 国产精品久免费的黄网站| 亚洲精品视频专区| 国产免费久久精品99re丫y| 亚洲AV无码久久精品成人| 国产亚洲综合久久| 亚洲国产精品狼友中文久久久 | 国产成人久久AV免费| 免费精品国产自产拍观看| 亚洲一区二区三区久久| 久久免费福利视频| 亚洲一区二区三区精品视频| 成年人视频在线观看免费| 亚洲国产精品国自产拍电影| h视频在线免费观看| 亚洲自偷自偷精品| 女人被弄到高潮的免费视频| 亚洲视频在线免费看| 波多野结衣免费一区视频 | 四虎永久精品免费观看| www免费黄色网| 亚洲另类图片另类电影| 国产香蕉免费精品视频| 久久精品a亚洲国产v高清不卡| 黄页网站在线看免费| 亚洲乱码中文字幕小综合| 免费二级毛片免费完整视频| 色欲A∨无码蜜臀AV免费播| 亚洲国产综合专区电影在线 | 国产精品永久免费视频|