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举例