17 網路用戶端編程 - 《Python 核心編程》

來源:互聯網
上載者:User

標籤:

?? 引言 ?? 檔案傳輸?? 檔案傳輸通訊協定(FTP)?? 網路新聞、Usenet, 和新聞群組?? 網路新聞傳輸通訊協定(NNTP)?? 電子郵件?? 簡易郵件傳輸通訊協定(SMTP)?? 郵局通訊協定第 3 版(POP3)?? 相關模組17.1 什麼是網際網路用戶端?
    三個網際網路協議——FTP, NNTP 和POP3    用戶端/伺服器模型17.2 檔案傳輸檔案傳輸網際網路協議    網際網路中最流行的事情就是檔案的交換。檔案交換無處不在。    檔案傳輸通訊協定(FTP)    Unix-to-Unix 複製協議(UUCP)    網頁的超文本傳輸 協議(HTTP)    Unix 下的遠程檔案複製指令rcp,以及更安全,更靈活的scp 和rsync    HTTP 主要用於網頁檔案的下載和訪問Web 服務上。    HTTP一般不要求使用者輸入登入的使用者名稱密碼就可以訪問伺服器上的檔案和服務。    HTTP 檔案傳輸請求主要是用於擷取網頁(檔案下載)。     scp 和rsync 要求使用者登入到伺服器,否則不能上傳或下載檔案。    FTP,跟scp/rsync 一樣,可以上傳或下載檔案,還採用了Unix 的多使用者的概念,使用者一定要輸入有效使用者名稱和密碼才能使用。不過,FTP 也允許匿名登入。檔案傳輸通訊協定(FTP)    檔案傳輸通訊協定由已故的Jon Postel 和Joyce Reynolds 開發,記錄在RFC(Request for Comment)959 號文檔中,於1985 年10 月發布。    檔案傳輸通訊協定主要用於匿名下載公用檔案。也可以用於在兩台 電腦之間傳輸檔案,尤其是在使用Unix 系統做為檔案儲存體系統,使用其它機器來工作的情況。    FTP 要求輸入使用者名稱和密碼才能訪問遠端FTP 伺服器,但它也允許沒有帳號的使用者以匿名使用者 登入。    匿名使用者通過FTP 協議可以使用的命令與一般的使用者相比來說,限制更多。        在底層上,FTP 只使用TCP——它不使用UDP。    FTP 用戶端和伺服器都使用兩個通訊端來通訊:一個是控制和命令連接埠(21 號連接埠),另一個是資料連接埠(有時是20 號連接埠)。              圖17-1 網際網路上的FTP 用戶端和伺服器。用戶端和伺服器使用指令和控制連接埠發送FTP 協議, 而資料通過資料連接埠傳輸。    FTP 有兩種模式:主動和被動。        只有在主動模式伺服器才使用資料連接埠。 在伺服器把20 號連接埠設定為資料連接埠後,它“主動”串連用戶端的資料連接埠。        而被動模式中,伺服器只是告訴用戶端它的隨機連接埠的號碼,用戶端必須主動建立資料連線。在這種模式下,你會看到, FTP 伺服器在建立資料連線時是“被動”的。Python 和FTP    在使用Python 的FTP 支援時,你所需要做的就是匯入ftplib 模組,並執行個體化一個ftplib.FTP 類對象。    所有的FTP 操作(如登入,傳輸檔案和登出等)都要使用這個對象來完成。    from ftplib import FTP    f = FTP(‘ftp.python.org‘)    f.login(‘anonymous‘, ‘[email protected]‘)    :    f.quit()ftplib.FTP 類方法            互動式FTP 樣本    用戶端FTP 程式舉例      
 1 #!/usr/bin/env python 2  3 import ftplib 4 import os 5 import socket 6  7 HOST = ‘ftp.mozilla.org‘ 8 DIRN = ‘pub/mozilla.org/webtools‘ 9 FILE = ‘bugzilla-LATEST.tar.gz‘10 11 def main():12     try:13         f = ftplib.FTP(HOST)14     except (socket.error, socket.gaierror), e:15         print ‘ERROR: cannot reach "%s"‘ % HOST16         return17     print ‘*** Connected to host "%s"‘ % HOST18 19     try:20         f.login()21     except ftplib.error_perm:22         print ‘ERROR: Cannnot login anonymously‘23         f.quit()24         return25     print ‘*** Logged in as "anonymous"‘26 27     try:28         f.cwd(DIRN)29     except ftplib.error_perm:30         print ‘ERROR: cannot CD to "%s"‘ % DIRN31         f.quit()32         return33     print ‘*** Changed to "%s" folder‘ % DIRN34 35     try:36         f.retrbinary(‘RETR %s‘ % FILE,37                 open(FILE, ‘wb‘).write)38     except ftplib.error_perm:39         print ‘ERROR: cannot read file "%s"‘ % FILE40         os.unlink(FILE)41     else:42         print ‘*** Downloaded "%s" to CWD‘ % FILE43         f.quit()44         return45 46 if __name__ == ‘__main__‘:47     main()
FTP 的其它方面    Python 同時支援主動和被動模式。注意,在Python2.0 及以前版本中,被動模式支援預設是關 閉的,在Python2.1 及以後版本中,預設是開啟的。    17.3 網路新聞Usenet 與新聞群組    Usenet 新聞系統是一個全球存檔的“電子公告板”。   
Usenet 新聞系統是一個全球存檔的“電子公告板”。各種主題的新聞群組一應俱全,從詩歌到政治,從自然語言學到電腦語言,軟體到硬體,種植到烹飪,招工,應聘,音樂,魔術,分手,求愛等。新聞群組可以是面向全球泛泛而談,也可以是只面向某個地理地區。整個系統是一個由大量電腦群組成的一個龐大的全球網路,電腦之間共用Usenet 上的文章.如果某一個使用者發了一個文章到本地的Usenet 電腦上,這個文章會被傳播到其它相連的電腦上,並再由這些電腦傳到與它們相連的電腦上,直到這個文章傳播到了全世界,每個人都收到這個文章為止.每個系統都有一個它已經“訂閱”的新聞群組的列表,它只接收它感興趣的新聞群組裡的文章——而不是伺服器上所有新聞群組的文章。Usenet 新聞群組服務內容取決於服務提供者,很多都是可供公眾訪問的,也有一些只允許特定的使用者使用,例如付費使用者,特定大學的學生等。如果Usenet 系統管理員設定了的話,有可能會要求輸入使用者名稱和密碼。管理員也可以設定是否只允許上傳或只允許下載。
網路新聞傳輸通訊協定(NNTP)        供使用者在新聞群組中下載或發表文章的方法叫網路新聞傳輸通訊協定(NNTP)。它由Brain Kantor(加    利福尼亞大學聖地亞哥分校)和Phil Lapsley(加利福尼亞大學伯克利分校)建立並記錄在RFC 977    中,於1986 年2 月公布。其後的更新記錄在RFC 2980,於2000 年10 月公布。        FTP 需 要不同的連接埠來做登入,資料轉送和控制,而NNTP 只使用一個標準連接埠119 來做通訊。             圖17-2 網際網路上的NNTP 用戶端和伺服器。用戶端主要閱讀新聞,有時也發文章。文章會在服 務器之間做同步。Python 和NNTP    用FTP 一樣,我們所要做的就是匯入nntplib那個Python 模組,然後要執行個體化這個類nntplib.NNTP並調用相應的方法。    一般來說,在你登入完成後,你要調用group()方法來選擇一個感興趣的新聞群組。    group()方法返回伺服器的返回資訊,文章的數量,第一個和最後一個文章的ID,以及組的名字。             from nntplib import NNTP        n = NNTP(‘your.nntp.server‘)        r,c,f,l,g = n.group(‘comp.lang.python‘)        ...        n.quit()nntplib.NNTP 類方法            17.4 電子郵件    訊息由頭域(合起來叫訊息頭)以及後面可選的訊息體組成。    RFC 規定,郵件體是可選的,只有郵件標頭是必要的。
E-mail 系統組件和協議    訊息傳輸代理 (MTA)    MX(郵件交換Mail eXchange)
發送E-mail        要能發送e-mail,你的郵件用戶端一定要串連到一個MTA,它們靠某種協議進行通訊。MTA 之    間通訊所使用的協議叫訊息傳輸系統(MTS)。只有兩個MTA 都使用這個協議時,才能進行通訊。在    本節開始時就說過,由於以前存在很多不同的電腦系統,每個系統都使用不同的網路軟體,這種    通訊很危險,具有不可預知性。更複雜的是,有的電腦使用互連的網路,而有的電腦使用調製解調    器撥號,訊息的發送時間也是不可預知的。事實上,筆者曾經有一封郵件在發送9 個月後才收到!    互連網的速度怎麼會這麼慢?出於對這些複雜度的考慮,現代e-mail 的基礎之一,簡單郵件傳輸協    議(SMTP)於1982 年出現了。     SMTP        SMTP 由已故的Jonathan Postel(加利福尼亞大學資訊學院)建立,記錄在RFC 821 中,於 1982 年8 月公布。        SMTP 是在網際網路上MTA 之間用於訊息交換的最常用的MTS。它被MTA 用來把e-mail 從一台主機    傳送到另一台主機。在你發e-mail 的時候,你必須要串連到一個外部的SMTP 伺服器,這時,你的    郵件程式是一個SMTP 用戶端。你的SMTP 伺服器也因此成為了你的訊息的第一個跳板。                Python 和SMTP    是的,也存在一個smtplib 模組和一個smtplib.SMTP 類要執行個體化。    跟NNTP 一樣, SMTP 通訊時,只要一個連接埠25。    像NNTP 一樣,登入是可選的,只有在伺服器開啟了SMTP 認證(SMTP-AUTH)時才要登入。            from smtplib import SMTP        n = SMTP(‘smtp.yourdomain.com‘)        ...        n.quit()smtplib.SMTP 類方法    對大多數e-mail 發送程式來說,只有兩個方法是必須的:sendmail()和 quit()。    sendmail()的所有參數都要遵循RFC 2822,即e-mail 地址必須要有正確的格式,訊息體要有正 確的前置頭,前置頭後面是兩個斷行符號和換行(\r\n)對。    注意,實際的訊息體不是必要的。根據RFC 2822,“唯一要求的頭資訊只有發送日期和發送地址”, 即“Date:”和“From:”:(MAIL FROM, RCPT TO, DATA)    接收E-mail    在家用電腦中啟動並執行應用程式叫郵件使用者代理(MUA)。    MUA 從伺服器上下載郵件,在這個過程中 可能會自動刪除它們(也可能不刪除,留在伺服器上,讓使用者手動刪除)。    MUA 也必須要能發送郵件,在發送郵件的時候,它要能直接與MTA 用SMTP 進行通訊。POP 和IMAP
    用於下載郵件的第一個協議叫郵局協議(POP),記錄在RFC 918 中,於1984 年10 月公布。    郵局協議 (POP)的目的是讓使用者的工作站可以訪問郵箱伺服器裡的郵件。郵件要能從工作站通過簡易郵件傳輸通訊協定(SMTP)發送到郵件伺服器”    在POP 之後幾年,出現了另一個協議,叫互動式郵件訪問協議(IMAP)    當今世界上佔有郵件伺服器大多數市場的Microsoft Exchange 就使用IMAP 作 為其下載機制。             圖17-3 網際網路上的E-Mail 寄件者和收件者。用戶端通過他們的MUA 和相應的MTA 進行通訊, 來下載和發送郵件。E-Mail 從一個MTA“跳”到另一個MTA,直到到達目的地為止。Python 和POP3    匯入poplib,執行個體化poplib.POP3 類            from poplib import POP3        p = POP3(‘pop.python.is.cool‘)        p.user(...)        p.pass_(...)        ...        p.quit()poplib.POP3 類方法    17.5 相關模組             

17 網路用戶端編程 - 《Python 核心編程》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.