[PYTHON] 核心編程筆記(17.P

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協議客戶端類