[PYTHON] 核心编程笔记(17.P

发布时间:2019-09-20 07:33:23编辑:auto阅读(1651)

    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协议客户端类


关键字