17.1 什麼是因特網客戶端python
把因特網簡化爲一個數據交換中心,數據交換的參與者是一個服務提供者和一個服務的使用者。web
FTP/NNTP/POP3瀏覽器
17.2 文件傳輸服務器
文件傳輸協議(File Transfer Protocol)FTP網絡
Unix-to-Unix複製協議(Unix-to-Unix Copy Protocol,UUCP)dom
網頁的超文本傳輸協議(Hypertext Transfer Protocol,HTTP)socket
遠程文件複製指令rcp(以及更靈活的scp和rsync)ui
HTTP主要用於網頁文件的下載和訪問web服務上,它通常不要去用戶輸入登陸的用戶名密碼就能夠訪問服務器的上文件和服務。HTTP文件傳輸請求主要是spa
用於獲取網頁。命令行
相反的,scp和rsync要去用戶登陸到服務器,不然不能上傳和下載文件。FTP和scp/rsync同樣,能夠上傳或下載文件,還採用了Unix的多用戶概念,用戶必定要輸入
有效的用戶名和密碼才能使用。不過,FTP也容許匿名登陸。
17.2.2 文件傳輸協議(FTP)
FTP協議工做流程:
1.客戶端鏈接遠程的FTP服務器
2.客戶端輸入用戶名和密碼(或「匿名」和電子郵件地址)
3.客戶端作各類文件傳輸和信息查詢操做
4.客戶端登出遠程FTP服務器,結束通信
FTP底層上只使用TCP
FTP有兩種模式:主動和被動。只有在主動模式服務器才使用數據端口,在服務器把20號端口設置爲數據 端口後,它主動鏈接客戶的數據端口。而被動模式中,服務器只是告訴客戶端它的
隨機端口的號碼,客戶端必須主動創建數據鏈接。
17.2.3 python 和FTP
導入ftplib模塊
17.2.4 ftplib.FTP類方法
login(user='anonymous',passwd=".acct=") 登陸到FTP服務器,全部的參數都是可選的
pwd() 獲得當前的工做目錄
cwd(path) 把當前工做目錄設置爲path
17.2.5 交互式FTP示例
17.2.6 客戶端FTP程序舉例
#-*-coding:utf-8-*- import ftplib import os import socket HOST ='ftp.mozilla.org' DIRN ='pub/mozilla.org/webtools' FILE ='bugzilla-LATEST.tar.gz' def main(): try: f = ftplib.FTP(HOST) except (socket.error,socket.gaierror),e: print'ERROR:cannot reach "%s"' % HOST return print '***Connected to host"%s"' % HOST try: f.login() except ftplib.error_perm: print 'ERROR: cannot login anonymously' f.quit() return print '*** Logged in as "anonymous"' try: f.cwd(DIRN) except ftplib.error_perm: print'ERROR: cannot CD to "%s"' %DIRN f.quit() return print '*** Changed to ""%s folder' %DIRN try: f.retrbinary('RETR %s' %FILE,open(FILE,'wb').write) except ftplib.error_perm: print 'ERROR:cannot readfile "%s"' %FILE os.unlink(FILE) else: print '***Downloaded "%s" to CWD' %FILE f.quit() return if __name__ =='__main__': main()
17.2.7 FTP的其餘方面
如下是一些典型的FTP客戶端類型:
1.命令行客戶端程序
2.GUI客戶端程序
3.網頁瀏覽器
4.定製程序
17.3 網絡新聞
17.3.1 Usenet 與新聞組
17.3.2 網絡新聞傳輸協議(NNTP)
NNTP只使用一個標準端口119來通信
17.3.3 Python 和NNTP
幾乎徹底 複製了FTP協議,惟一不一樣點就是根據NNTP服務器的配置不同,登陸這一步是可選的
17.3.4 nntplib.NNTP類方法
17.4 電子郵件
電子郵件的確切定義是什麼?「消息由頭域(合起來叫消息頭)以及後面可選的消息體組成」
17.4.1 電子郵件系統組件和協議
最主要的組件是消息傳輸代理,這是一個郵件交換主機上運行的一個服務器程序,它負責郵件的路由、隊列和發送工做。它們就是郵件從源主機到目的
主機所要通過的跳板。因此也被稱做是「信息傳輸」的「代理」
17.4.2 發送電子郵件
要能發送電子郵件,你的郵件客戶端必定要鏈接到一個MTA,它們靠某種協議進行通信。MTA之間通信所使用的協議叫消息傳輸系統(MTS)
簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)
17.4.3 python 和 SMTP
smtplib模塊和一個smtplib.SMTP類要實例化
服務器在打開了SMTP認證(SMTP-AUTH)時纔要登陸。SMTP通信時,只要一個端口25。
from smtplib import SMTP n = SMTP('smtp.yourdomain.com') ... n.quit()
17.4.4 smtplib.SMTP類方法
sendmail(from,to,msg[,mopts,ropts]) 把msg 從from發送給to(列表或元組)。ESMTP設置(mopts)和收件人設置(ropts)爲可選
quit() 關閉鏈接,而後退出
login(user,passwd) 使用user用戶和passwd密碼登陸到SMTP服務器只在有SMTP-AUTH時使用
17.4.7 接收電子郵件
17.4.8 POP和IMAP
郵局協議(POP)的目的是讓用戶的工做站能夠訪問郵箱服務器裏的郵箱
17.4.11 poplib.POP3類方法
user(login) 發送用戶名login到服務器,並 等候服務器的正在等待用戶密碼的返回信息
pass_(passwd) 發送密碼passwd,引起一個異常
stat() 返回郵件的狀態,一個2元組(msg_ct,mbox_siz):消息的數量和消息的總大小也即字節數
17.4.12 客戶端程序SMTP和POP3舉例