[PYTHON] 核心編程筆記(17.P
- 2020 年 1 月 6 日
- 筆記
17.1 什麼是網際網路客戶端?
17.2 文件傳輸
17.2.1 文件傳輸網際網路協議
流行的有文件傳輸協議(FTP),Unix-to-Unix複製協議(UUCP),以及網頁的超文本傳
輸協議(HTTP),另外,還有(Unix下的)遠程文件複製指令scp(以及更安裝,更靈活的
scp和rsync)
17.2.2 文件傳輸協議(FTP)
展示這個協議工作流程如下:
1.客戶端連接遠程FTP伺服器
2.客戶端輸入用戶名和密碼(或"anonymous"和e-mail地址)
3.客戶端做各種文件傳輸和資訊查詢操作
4.客戶端登出遠程FTP伺服器,結束通訊
17.2.3 Python和FTP
流程:
1.連接到伺服器
2.登陸
3.發出服務請求(有可能返回資訊)
4.退出
from ftplib import FTP
f = FTP('ftp.python.org')
f.login('anonymous','[email protected]')
.
.
f.quit()
17.2.4 ftplib.FTP類方法
方法描述
login(user='anonymous'
,passwd='',acct='')登陸到FTP伺服器,所有的參數都是可選的
pwd()得到當前工作目錄
cwd(path)把當前工作目錄設置為path
dir([path[,…[,cb]]])顯示path目錄里的內容,可選參數cb是一個回
調函數,他會被傳給retrlines()方法
nlst([path[,…]])與dir()類似,但返回一個文件名的列表,而不
是顯示這些文件名
retrlines(cmd) [, cb])給定FTP命令(如"RETR filename").用於下載
文本文件,可選的回調函數cb用於處理文件的
每一行
retrbinary(cmd, cb[, bs=8192[, ra]])
與retrlines()類似,只是這個指令處理二進
制文件,回調函數cb用於處理每一塊(塊大小
默認8K)下載的數據
storlines(cmd, f)給定FTP命令(如"STOR filename"),以上傳文
本文件,要給定一個文件對象f
storbinary(cmd, f[, bs=8192])與storlines()類似,只是這個指令處理二進
制文件,要給定一個文件對象f,上傳塊大小bs
默認為8kbs=8192
rename(old, new)把遠程文件old改名為new
delete(path)刪除位於path的遠程文件
mkd(directory)創建遠程目錄
rmd(directory)刪除遠程目錄
quit()關閉連接並退出
17.2.5 互動式FTP示例
注:保證本機開啟ftp服務
>>> from ftplib import FTP
>>> f = FTP('localhost')
>>> f.login('test1','12344321')
'230 Login successful.'
>>> f.dir()
-rw-r–r– 1 0 0 0 Dec 20 14:34 1
-rw-r–r– 1 0 0 0 Dec 20 14:34 2
-rw-r–r– 1 0 0 0 Dec 20 14:34 3
-rw-r–r– 1 0 0 0 Dec 20 14:34 4
-rw-r–r– 1 0 0 0 Dec 20 14:34 5
>>> f.quit()
'221 Goodbye.'
17.2.6 客戶端FTP程式舉例
例,下載網站中最新版本的文件
# vi getLateestFTP.py
—————————————
#!/usr/bin/env python
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: connot 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: connot read file "%s"' % FILE
os.unlink(FILE)
else:
print '*** Downloaded "%s" to CWD' % FILE
f.quit()
return
if __name__ == '__main__':
main()
—————————————
# python getLatestFTP.py
*** Connected to host "ftp.mozilla.org"
*** Logged in as "anonymous"
*** Changed to "pub/mozilla.org/webtools" folder
*** Downloaded "bugzilla-LATEST.tar.gz" to CWD
17.2.7 FTP的其他方面
Python同時支援主動和被動模式
以下是一些典型的FTP客戶端類型:
命令行客戶端程式
GUI客戶端程式
網頁瀏覽器
訂製程式
17.3 網路新聞
17.3.1 Usenet 與新聞組
13.3.2 網路新聞傳輸協議(NNTP)
17.3.3 Python和NNTP
17.3.4 nntplib.NNTP類方法
17.3.5 互動式NNTP舉例
17.3.6 客戶端程式NNTP舉例
17.3.7 NNTP的其他方面
17.4 電子郵件
17.4.1 E-mail系統組件和協議
17.4.2 發送E-mail
要發送e-mail,你的郵件客戶端一定要連接到一個MTA(消息傳輸代理),通過某種協
議通訊,MTA之間通訊所使用的協議叫消息傳輸系統(MTS),只有兩個MTA都使用這個
協議時,才能進行通訊.
SMTP
一些實現了SMTP的著名MTA包括:
開源MTA:
Sendmail
Postfix
Exim
qmail
商業MTA
Microsoft Exchange
Lotus Notes Domaino Mail Server
SMTP是在網際網路上MTA之間用於消息交換的最常用的MTS,它被MTA用來把e-mail從
一台主機傳送到另一台主機,在你發e-mail的時候,你必須連接到一個外部的SMTP
伺服器,這是,你的郵件程式是SMTP客戶端,你的SMTP伺服器為你的消息的第一跳板
17.4.3 Python和SMTP
1.連接到伺服器
2.登陸(如果需要的話)
3.發出服務請求
4.退出
下面是一些Python的偽程式碼:
from smtplib import SMTP
n = SMTP('smtp.yourdomain.com')
…
n.quit()
17.4.4 smtplib.SMTP方法
SMTP對象的方法
方法描述
Sendmail
(from,to,msg[,
mopts,ropts])把msg從from發送給to(列表或元祖).ESMTP設置(mopts)和收件人設置( ropts)為可選
quit()關閉連接,然後退出
login(user, passwd)使用user用戶和passwd密碼登陸到SMTP伺服器
17.4.5 互動式SMTP示例:
17.4.6 SMTP的其他方面
17.4.7 接收E-mail
17.4.8 POP和IMAP
17.4.9 Python和POP3
17.4.10 互動式POP3舉例
17.4.10 poplib.POP3類方法
17.4.12 客戶端程式SMTP和POP3舉例
17.5 相關模組
17.5.2 其他網路協議
模組描述
ftplibFTP協議客戶端
gopherlibGopher協議客戶端
httplibHTTP和HTTPS協議客戶端
imaplibIMAP4協議客戶端
nntplibNNTP protocol client
poplibPOP3協議客戶端
smtplibSMTP協議客戶端
telnetlibTelnet協議客戶端類