當前位置:首頁 » 編程語言 » m2cryptopython

m2cryptopython

發布時間: 2022-12-09 05:41:58

python使用pip安裝m2crypto出現了報錯

windows 的可以試試https://github.com/saltstack/salt-windows-install/blob/master/deps/win32-py2.7/M2Crypto-0.21.1.win32-py2.7.msi。

② Centos7如何安裝Chacha20加密演算法

有些程序會使用Chacha20加密演算法,如果Centos7系統報錯Exception: libsodium not found,則缺乏M2Crypto與libsodium依賴環境所致;

Salsa20是一種流加密演算法,由Daniel J. Bernstein提交到eSTREAM。它創建在基於add-rotate-xor(ARX)操作的偽隨機函數之上——32位模加、異或(XOR)和循環移位操作。Salsa20映射一個256位密鑰、一個64位nonce以及一個64位流位置到一個512位的輸出(也存在一個128位密鑰的版本)。這使Salsa20具有了不同尋常的優勢,用戶可以在恆定時間內尋求輸出流中的任何位置。它可以在現代x86處理器中提供約每4–14次循環周期一位元組的速度,並具有合理的硬體性能。它沒有注冊專利,並且Bernstein還撰寫了幾篇對常見架構優化的公有領域實現。Salsa20已被提交到eSTREAM。

一個相關的密碼演算法ChaCha,具有類似的特點,但有不同的循環移位函數,已在2008年由Bernstein發布。

M2Crypto與Libsodium簡介

M2Crypto:一個Python加密和SSL工具包

M2Crypto是用於OpenSSL特徵為RSA,DSA,DH,EC,HMAC,消息摘要,對稱密碼(包括AES)的最完整的Python包裝器。SSL功能實現客戶端和伺服器; Python擴展Python的httplib,urllib和xmlrpclib; 不可偽造的HMAC』AuthCookie用於網路會話管理; FTP / TLS客戶端和伺服器; S / MIME; ZServerSSL:Zope和ZSmime的HTTPS伺服器:Zope的S / MIME信使。M2Crypto也可以用於為Twisted提供SSL。通過引擎介面支持智能卡。

Libsodium

用於加密,解密,簽名,密碼散列,其目標是提供構建更高級別加密工具所需的所有核心操作。盡管強調高安全性,但是原語比NIST標準的大多數實現更快。

如果你centos7系統需要支持Chacha20加密演算法請使用以下命令安裝

1

2

3

4

5

6

7

8

9

10

11

yum install m2crypto gcc -y

wget -N --no-check-certificate https: //download .libsodium.org /libsodium/releases/libsodium-1 .0.8. tar .gz

tar zfvx libsodium-1.0.8. tar .gz

cd libsodium-1.0.8

. /configure

make && make install

echo "include ld.so.conf.d/*.conf" > /etc/ld .so.conf

echo "/lib" >> /etc/ld .so.conf

echo "/usr/lib64" >> /etc/ld .so.conf

echo "/usr/local/lib" >> /etc/ld .so.conf

ldconfig

③ python有rsa模塊么

  1. 它是由三位數學家Rivest、Shamir 和 Adleman 設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字命名,叫做RSA演算法。

  2. 需要python import、python math模塊方法。

④ python安裝錯誤求解

安裝python依賴文件
pip install docopt pygments

然後再執行
sudo python setup.py install

⑤ 如何在 js 里 RSA 加密然後再python 里解密

所說所有的變數都是對象。 對象在python里,其實是一個指針,指向一個數據結構,數據結構里有屬性,有方法。

對象通常就是指變數。從面向對象OO的概念來講,對象是類的一個實例。在python里很簡單,對象就是變數。

class A:
myname="class a"
上面就是一個類。不是對象
a=A()
這里變數a就是一個對象。
它有一個屬性(類屬性),myname,你可以顯示出來
print a.myname

所以,你看到一個變數後面跟點一個小數點。那麼小數點後面

⑥ 搭建linux系統的VPS的步驟教程

Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路 操作系統 。有用戶想要在Linux上搭建vps這篇 文章 主要介紹了實例講解搭建Linux系統的VPS的步驟,包括防火牆和SSH等基本軟體的部署 方法 ,非常細致,需要的朋友可以參考下

前期准備

需要購買一台擁有 root 許可權的 VPS ,我選擇的是 搬瓦工 ,當時購買的是 512 M 內存 5 G SSD,500 G 流量/月, 9.99 刀每年,但是好像現在這種低價套餐已經結束了。有意的朋友可以看一下其他的套餐或者別的公司的 VPS。有的朋友說 DigitalOcean 的速度非常快,看YouTube直接 1440p,但是我還沒測試過,目前搬瓦工的速度能滿足我的需求,而且 DO 的價格比較昂貴。

伺服器購買後,安裝 CentOS7,因為以下教程都是基於 CentOS7 的,安裝新的 OS 後,搬瓦工會告訴你 SSH 的埠和 root 的密碼,這些是自己無法自定義的,要記住了如果實在忘了也可以重置 root 密碼,或者直接使用搬瓦工提供的在線SSH登錄來操作也可,就是反應比較慢,所以我們以後還是常用 ssh 登錄來配置 VPS ,Mac 下直接使用終端就好,win 下自行尋找一個 ssh 工具就好。

登錄 ssh 的命令:

復制代碼代碼如下:

$ ssh -p vps 端 口號 root@vpsIP 地址

登錄上以後就相當於在本地操作一樣了,你可以使用各種 Linux 命令來操作了。

配置防火牆

如果 SSH 無法登錄,那說明防火牆關閉了 SSH 埠,需要通過在線 SSH 登錄進去關閉防火牆重新配置。

清除防火牆配置

復制代碼代碼如下:

$ iptables -F

清除 iptabels 所有表項,同時 nat 設置也沒了,但是我們後續的腳本里會配置的,不用擔心。如果 SSH 登錄正常就不用管防火牆。

安裝 firewalld

復制代碼代碼如下:

$ yum install firewalld firewall-config

$ systemctl start firewalld

P.S. 我在安裝完 firewalld 之後然後啟動服務的時候一直顯示失敗,然後重啟了一遍伺服器就可以正常的啟動 firewalld 服務了,有類似情況的朋友可以重啟一下伺服器。

修改 SSH 埠

復制代碼代碼如下:

$ vi /usr/lib/firewalld/services/ssh.xml

會出現以下的內容:

復制代碼代碼如下:

SSH

Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.

將 port=」22」,修改成搬瓦工提供給你的埠號,然後重載 firewalld 就 OK。

vi 的命令: 按 「i」 是編輯模式,編輯後按 「esc」 退出編輯模式,然後按 Shift 輸入「:」 和 「wq」 保存退出 vi。

復制代碼代碼如下:

$ firewall-cmd --permanent --add-service=ssh

$ firewall-cmd --reload

OK,現在准備工作都已就緒,安裝了源,安裝配置了防火牆,下一步開始搭建服務了。

搭建 Shadowsocks 服務

這個服務是最簡單也是最常用的。

安裝組件

復制代碼代碼如下:

$ yum install m2crypto python-setuptools

$ easy_install pip

$ pip install shadowsocks

安裝時部分組件需要輸入 Y 確認。小內存 VPS 可以分別安裝組件。

安裝完成後配置伺服器參數

復制代碼代碼如下:

$ vi /etc/shadowsocks.json

寫入如下配置:

復制代碼代碼如下:

{

"server":"0.0.0.0",

"server_port":8388,

"local_address": "127.0.0.1",

"local_port":1080,

"password":"mypassword",

"timeout":300,

"method":"aes-256-cfb",

"fast_open": false,

"workers": 1

}

將上面的 mypassword 替換成你的密碼, server_port 也是可以修改的,例如 443 是 Shadowsocks 客戶端默認的埠號。

如果需要修改埠,需要在防火牆里打開響應的埠,用 firewalld 操作就比較簡單了:

復制代碼代碼如下:

$ vi /usr/lib/firewalld/services/ss.xml

下面代碼粘貼到裡面:

復制代碼代碼如下:

SS

Shadowsocks port

保存退出,然後重啟 firewalld 服務:

復制代碼代碼如下:

$ firewall-cmd --permanent --add-service=ss

$ firewall-cmd --reload

運行命令,啟動 Shadowsocks 服務

運行下面的命令:

復制代碼代碼如下:

$ ssserver -c /etc/shadowsocks.json

至此 shadowsocks 搭建完成,shadowsocks 已經可以使用,如果你沒有過高的要求,下面的步驟可以省略,下面是後台運行 Shadowsocks 的步驟。

安裝 supervisor 實現後台運行

運行以下命令下載 supervisor:

復制代碼代碼如下:

$ yum install python-setuptools

$ easy_install supervisor

然後創建配置文件:

復制代碼代碼如下:

$ echo_supervisord_conf > /etc/supervisord.conf

修改配置文件:

復制代碼代碼如下:

$ vi /etc/supervisord.conf

在文件末尾添加:

復制代碼代碼如下:

[program:ssserver]command = ssserver -c /etc/shadowsocks.json

autostart=true

autorestart=true

startsecs=3

設置 supervisord 開機啟動,編輯啟動文件:

復制代碼代碼如下:

$ vi /etc/rc.local

在末尾另起一行添加:

復制代碼代碼如下:

$ supervisord

保存退出(和上文類似)。另 centOS7 還需要為 rc.local 添加執行許可權:

復制代碼代碼如下:

$ chmod +x /etc/rc.local

至此運用 supervisord 控制 Shadowsocks 開機自啟和後台運行設置完成。重啟伺服器即可。

搭建 Strongswan 實現在 iOS 上連接 VPN

補充:Linux基本命令

1.ls命令:

格式::ls [選項] [目錄或文件]

功能:對於目錄,列出該目錄下的所有子目錄與文件;對於文件,列出文件名以及其他信息。

常用選項:

-a :列出目錄下的所有文件,包括以 . 開頭的隱含文件。

-d :將目錄像文件一樣顯示,而不是顯示其他文件。

-i :輸出文件的i節點的索引信息。

-k :以k位元組的形式表示文件的大小。

-l :列出文件的詳細信息。

-n :用數字的UID,GID代替名稱。

-F : 在每個文件名後面附上一個字元以說明該文件的類型,「*」表示可執行的普通文 件;「/」表示目錄;「@」表示符號鏈接;「l」表示FIFOS;「=」表示套接字。

2.cd命令

格式:cd [目錄名稱]

常用選項:

cd .. 返回上一級目錄。

cd ../.. 將當前目錄向上移動兩級。

cd - 返回最近訪問目錄。

3.pwd命令

格式: pwd

功能:顯示出當前工作目錄的絕對路徑。

相關閱讀:Linux主要特性

完全兼容POSIX1.0標准

這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。許多用戶在考慮使用Linux時,就想到以前在Windows下常見的程序是否能正常運行,這一點就消除了他們的疑慮。

多用戶、多任務

Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時並獨立地運行。

良好的界面

Linux同時具有字元界面和圖形界面。在字元界面用戶可以通過鍵盤輸入相應的指令來進行操作。它同時也提供了類似Windows圖形界面的X-Window系統,用戶可以使用滑鼠對其進行操作。在X-Window環境中就和在Windows中相似,可以說是一個Linux版的Windows。

支持多種平台

Linux可以運行在多種硬體平台上,如具有x86、680x0、SPARC、Alpha等處理器的平台。此外Linux還是一種嵌入式操作系統,可以運行在掌上電腦、機頂盒或游戲機上。2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel 64位晶元架構。同時Linux也支持多處理器技術。多個處理器同時工作,使系統性能大大提高。

搭建Linux系統的VPS的步驟相關文章:

1. Linux VPS中使用Crontab實現定時重啟任務

2. Linux系統怎麼用命令釋放內存

3. Linux伺服器上的PPTP 搭建方法有哪些

4. VPS怎麼設置安全配置

5. Linux查看操作系統安裝時間的方法總結

⑦ python安裝adb的時候出錯

http://www.microsoft.com/en-us/download/details.aspx?id=44266

安裝這個之後再試試

⑧ 怎麼在VS Code中配置C/C++開發環境

https://github.com/Jackpopc/DevWeekly/blob/master/weekly/2022-07-15-weekly.md

DevWeekly 收集整理每周優質開發者內容,包括 開源項目 工具資源 技術文章 等方面。

歡迎大家投稿,提交issue,推薦或者自薦開源項目/資源/工具/文章~

Python Star:1.4k

pikepdf是一個用於讀取和寫入PDF文件的Python庫。

它基於QPDF,而QPDF則是一個強大的PDF操作和修復庫。

這個庫類似於PyPDF2和pdfrw,但是,相對於後兩者,它提供更豐富的PDF操作功能,並允許對現有的PDF進行編輯和內容轉換。

它具有很多優秀的特性,例如:

Python Star:721

Towhee是一個靈活的、面向應用的框架,通過ML模型和其他操作的工作流來生成嵌入向量。

它的目的是使x2vec更加便捷、易用,從初級開發人員到大型組織--只需幾行代碼就能生成dense embedding。

為了實現這一目標,它為各種任務提供預構建的工作流,包括音頻/音樂嵌入、圖像嵌入、人物識別等等。

Python Star:31

ga-extractor是一個CLI工具,它能夠通過使用谷歌報告API提取谷歌分析數據,也可用於將數據轉換為適合遷移到其他分析平台的各種格式。

Python Star:146

如何通過Python代碼實現自動發送郵件?如果通過代碼添加附加信息或者附件?

envelope只需要一行代碼,就可以實現在發送電子郵件/簽名/加密內容的過程中添加一個信息和附件。

插入一個信息和附件,並通過單行發送電子郵件/簽名/加密內容。

它在python-gnupg、M2Crypto、smtplib、magic和電子郵件處理包的基礎上進行了一層包裝,他們的多個功能被合並到一個單一的函數中。

下面是一段示例代碼:

Java Star:942

一款功能齊全、開放源代碼、注重隱私的安卓電子郵件應用程序

FairEmail很容易設置,並且可以與幾乎所有的電子郵件系統兼容使用,包括Gmail、Outlook和Yahoo!

但是,它更加註重隱私,如果你想自己開發一款更加註重隱私的電子郵件APP,FairEmail非常有用。

它具有如下特性:

Java Star:361

Camera是一款注重隱私和安全的現代相機APP,可掃描QR和條形碼

它新版的GrapheneOS相機應用,基於Android的CameraX庫。

Go Star:1.8k

一個DNS伺服器,通過DNS協議提供有用的工具和服務。

例如,天氣、世界時間、單位轉換等

它提供方便的實用程序和服務,可以通過命令行輕松訪問。

下面是一些示例命令:

C Star:513

一款VR性能工具箱,面向性能的VR 游戲 mods集合。

包括mods:

除此之外,它還支持Oculus、OpenVR這些VR運行環境和Direct3D 11圖形API。

JavaScript Star:672

Hacker-Typer是一個簡單的網頁端小工具,模擬黑客打字,看上去很炫酷的感覺。

你可以打開頁面隨意敲擊鍵盤,它會生成一段很酷的代碼。


Rust Star:1.3k

CeresDB 是一款高性能、分布式、Schema-less 的雲原生時序資料庫,能夠同時處理時序型(time-series)以及分析型(analytics)負載。

RegExr是一個基於HTML/JS的工具,用於創建、測試和學習正則表達式。


BrainIDE旨在提供一個易於使用、輕量級和用戶友好的IDE。

它全部使用python和tkinter進行GUI設計和編碼。

這款軟體的主要目的是在不需要互聯網連接的情況下,在旅途中進行頭腦風暴式的編碼。


Geany是一個小而輕的集成開發環境。它的開發是為了提供一個小而快的集成開發環境,它只需要依賴其他軟體包。

另一個目標是盡可能地獨立於像KDE或GNOME這樣的特殊桌面環境。

所以, 它只使用 GTK+ 工具包,因此你只需要 GTK+ 運行庫來運行 Geany。


Lorien是一個畫布/繪畫/筆記應用程序,專注於性能、小型保存文件和簡單性。

它不像Krita、Gimp或Photoshop那樣基於點陣圖圖像,而是將筆觸保存為一個點的集合,並在運行時渲染它們(有點像SVG)。

它主要被設計成一個數字筆記本和頭腦風暴工具。


Shortcut是一款免費、跨平台、開源的視頻編輯工具。


做軟體開發過程中,時間復雜度、空間復雜度經常用來對數據結構和演算法進行復雜度分析。

在計算機科學中,如何找出哪個演算法或數據結構更有效或更快?我們怎樣才能比較兩種演算法或數據結構?

我們可以通過時間復雜度來比較給定的演算法:更快地完成給定任務的演算法是更好的。

這篇文章則詳細的闡述了什麼是時間復雜度?以及如何理解時間復雜度?

如果你從事Python開發,選擇解釋器、IDE、配置環境是一項非常簡單的工作,你只需要安裝Python就可以了。

但是,當處理C++時,這件時間就變得復雜多了,因為它需要一個編譯器,有許多C++編譯器可用。

這篇文章以使用MinGW為基礎,分享一些很不錯的工具,這些工具將使程序的運行過程更加容易。

⑨ kali linux 安裝empire問題

問題重災區集中在 m2crypto這個包的安裝上

解決辦法:

    詳細看報錯信息: 我這里報錯問題1為:openssl 問題:主要表現為:

ImportError: No mole named OpenSSL

dpkg: error: cannot access archive 'libssl1.0.0_1.0.1t-1+deb8u7_amd64.deb': No such file or directory

安裝這個ssl 的dev包,sudo apt install swig libssl-dev即可。

    詳細看報錯信息: 我這里報錯問題2為:fatal error:python.h: No such file or directory

到以下網站search以下這個頭文件,選擇有這個頭文件的包,然後sudo apt-get install + 這個包含頭文件的包

https://packages.ubuntu.com/search?mode=filename&suite=trusty§ion=all&arch=any&keywords=Python.h&searchon=contents

然後安裝完成後繼續安裝empire所需但系統當前沒有的模塊。

⑩ python 有沒有php裡面的soapclient這樣的東西

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 的開放源代碼活動。下面是該項目的綱要以及它們目前的狀態。首先,參與者:
4Suite SOAP,由 Fourthought 管理
SOAPy,由 Adam Elman 管理
SOAP.py,Python 項目的一個 Web 服務項目
soaplib,由 Secret Labs 管理
Orchard,由 Ken MacLeod 管理
PySOAP,由 Dave Warner 管理
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: <Fault soap:Client:
Server did not recognize the value of
HTTP Header SOAPAction: "".>

哦。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

import sys
#Import the SOAP.py machinery
from WebServices import SOAP
remote = SOAP.SOAPProxy(
"ck.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 Byproct!"

我們自己的 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 = "/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 = "ple-cal"
BODY_TEMPLATE = """<SOAP-ENV:Envelope
xmlns:SOAP-ENV="oap/envelope/"
xmlns:s="/ws/simple-cal"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>
<SOAP-ENV:Body>
<s:getMonth>
<year xsi:type="xsd:integer">%s</year>
<month xsi:type="xsd:integer">%s</month>
</s:getMonth>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>"""
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", "het/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:\n", 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"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SO
AP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<getMonthResponse SOAP-ENC:root="1">
<Result xsi:type="xsd:string"> 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
</Result>
</getMonthResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

仔細審查的位元組
如果您查找行 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"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SO
AP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:Curse xmlns:ns1="urn:HaddockIntf-IHaddock" SOAP-ENC:root="1">
<LangCode xsi:type="xsd:string">us</LangCode>
</ns1:Curse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************
*** 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"?><SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xml
soap.org/soap/encoding/"><SOAP-ENV:Body><NS1:CurseResponse xmlns:NS1="urn:HaddockIntf-
IHaddock" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:return
xsi:type="xsd:string">Anacoluthons!</NS1:return></NS1:CurseRespon
se></SOAP-ENV:Body></SOAP-ENV:Envelope>
************************************************************************
What captain Haddock had to say: "Anacoluthons!"

為進行比較,您可以在帶有下列代碼的舊的 Python 腳本或程序中獲得相同的信息:
import calendar
return calendar.month(2001, 10)

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

熱點內容
安卓模擬大自然怎麼玩 發布:2025-01-20 22:46:55 瀏覽:361
科密加密卡片 發布:2025-01-20 22:45:01 瀏覽:111
蘋果的文件怎麼轉到安卓 發布:2025-01-20 22:43:10 瀏覽:652
c語言迴文串 發布:2025-01-20 22:43:09 瀏覽:767
垃圾壓縮價格 發布:2025-01-20 22:14:05 瀏覽:421
溫十系統如何看處理器配置 發布:2025-01-20 21:59:47 瀏覽:302
米號源碼 發布:2025-01-20 21:55:30 瀏覽:893
電信四川dns伺服器ip 發布:2025-01-20 21:54:51 瀏覽:92
電腦彈出腳本錯誤還能繼續使用嗎 發布:2025-01-20 21:42:29 瀏覽:586
安卓私密照片在哪裡 發布:2025-01-20 21:41:05 瀏覽:5