[PYTHON] 核心編程筆記(17.Python網絡客戶端編程)

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章