文档章节

Python核心编程:第17章 网络客户端编程

finndai
 finndai
发布于 2016/12/05 23:42
字数 1242
阅读 12
收藏 1

17.1 什么是因特网客户端

把因特网简化为一个数据交换中心,数据交换的参与者是一个服务提供者和一个服务的使用者。

FTP/NNTP/POP3

17.2 文件传输

文件传输协议(File Transfer Protocol)FTP

Unix-to-Unix复制协议(Unix-to-Unix Copy Protocol,UUCP)

网页的超文本传输协议(Hypertext Transfer Protocol,HTTP)

远程文件复制指令rcp(以及更灵活的scp和rsync)

HTTP主要用于网页文件的下载和访问web服务上,它一般不要去用户输入登录的用户名密码就可以访问服务器的上文件和服务。HTTP文件传输请求主要是

用于获取网页

相反的,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举例

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
finndai
粉丝 1
博文 35
码字总数 38131
作品 0
南京
私信 提问
那些年,我们读过的python!

Python是一个强大、快速、易学、友好、开源的脚本语言。Hacker必备的语言之一。 Python - 历史由来 Python 是一种开源的面向对象的脚本语言,它起源于1989年末,当时,CWI(阿姆斯特丹国家数...

生气的散人
2014/03/21
1K
2
买《Python从小白到大牛》专题视频课程,送配套纸质图书

经过一年多时间的呕心沥血,Python立体化图书——《Python从小白到大牛》即将与大家见面了。所谓立体化图书包括:电子图书、视频、课件和服务等内容。 《Python从小白到大牛》纸质图书将于9...

tony关东升
07/23
0
0
那些年,我们学过的编程语言——Python篇

Hello World!不少人都与这句话邂逅在大家最初学习编程的时候。 2014年12月的编程语言排行榜中,Python位列在众多语言中的第8位,一直保持在前列。初学者看着简单清晰的语言极其容易上手。即...

生气的散人
2014/12/26
1K
4
翻译:《用python和Qt进行GUI编程》——介绍

介绍: 这本书讲的是如何利用Python和Qt来开发GUI应用程序的。仅仅需要一点点必备的知识:你可以使用一些面相对象的语言来编程,例如C++,C#,java或者python等等。在富文本编辑的那些章节,...

duoduo3_69
2013/02/07
0
0
Python这么强大, 怎样才能快速入坑?

作为一种年轻的编程语言,Python为何能在短短几年的时间内就以迅雷不及掩耳之势驰骋编程界?答案很简单,在人工智能时代,AlphaGo 都在使用的 Python语言,是最接近 AI 的编程语言。 随着Pyt...

bodasisiter
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
5
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
23
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
18
0
my.ini

1

architect刘源源
今天
16
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部