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','guess@who.org')
.
.
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协议客户端类