文档章节

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

finndai
 finndai
发布于 2016/12/05 23:42
字数 1242
阅读 10
收藏 1
点赞 0
评论 0

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编程语言、OOP编程思想以及函数式编程思想的立体化教程(含纸质图书、电子书、教学课件、源代码与视频教程)。为便于读者高效学习,快速掌握Python编程方法。本书作...

tony关东升 ⋅ 05/29 ⋅ 0

Python高级编程和异步IO并发编程

Python高级编程和异步IO并发编程 网盘地址:https://pan.baidu.com/s/1eB-BsUacBRhKxh7qXwndMQ 密码: tgba 备用地址(腾讯微云):https://share.weiyun.com/5Z3x9V0 密码:7cdnb2 针对Pytho...

人气王子333 ⋅ 04/23 ⋅ 0

读书节最该买的书,我都帮你们挑出来了

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 过完漫长的冬天,送走了倒春寒,转眼4月也即将过半,我们有那么多的节日要过,对爱读书的真爱粉儿而言,读书节这个大...

异步社区 ⋅ 04/19 ⋅ 0

tensorflow源码分析(二)

2015年11月9日,Google发布深度学习框架TensorFlow并宣布开源,并迅速得到广泛关注,在图形分类、音频处理、推荐系统和自然语言处理等场景下都被大面积推广。TensorFlow系统更新快速,官方文...

tianguiyuyu ⋅ 05/12 ⋅ 0

良心推荐:一份20周学习计算机科学的经验贴(附资源)

雷锋网按:这里是,油管Artificial Intelligence Education专栏,原作者Siraj Raval授权雷锋字幕组编译。 原标题 Computer Science Curriculum 翻译 | 王飞 整理 | 凡江 这是一份五个月(20个...

雷锋字幕组 ⋅ 05/08 ⋅ 0

收藏|学习Python编程的6本书籍

本文与大家分享一些Python编程语言的入门书籍,其中不乏经典。有关书籍的介绍,大部分截取自官方介绍。 Python基础教程(Begining Python) 《Python基础教程(第2版·修订版)》是经典的Pyt...

诸葛玥 ⋅ 2017/12/28 ⋅ 0

福利 | Python专场竞技,这些书给你加把力!

端午节将至,各地龙舟备战竞技,粽子部队也整装待发。小编掐指一算,这种热闹的时节,是时候展现真正的技(fu)术(li)了! (“Python号”龙舟闪亮登场!) Python作为当下最流行的编程语言...

⋅ 06/15 ⋅ 0

一份Python基础知识思维导图

如果说起最近几年发展势头比较猛的编程语言,可能想到最多的就是Python了。简单易用,模块丰富,功能强大,特别是机器学习的火爆,更是把Python推上了新的热度。相信点进来看的你也一定对Pyt...

JustMe23 ⋅ 05/31 ⋅ 0

连 00 后学 Python 了,身为程序员的我慌了

2018 年 1 月 16 日,教育部召开新闻发布会,正式将人工智能、物联网、大数据处理划入高中新课标,并于今年秋季开始执行。这意味着,现在 16 岁的学生就要开始学习编程了! 本次核心目标:修...

dqcfkyqdxym3f8rb0 ⋅ 05/06 ⋅ 0

给伸手党的福利:Python 新手入门引导

这是一篇 Python 入门指南,针对那些没有任何编程经验,从零开始学习 Python 的同学。不管你学习的出发点是兴趣驱动、拓展思维,还是工作需要、想要转行,都可以此文作为一个参考。 在这个信...

crossin ⋅ 06/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

容器之重命名镜像

使用docker tag命令来重命名镜像名称,先执行help,查看如何使用如下 mjduan@mjduandeMacBook-Pro:~/Docker % docker tag --helpUsage:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TA...

汉斯-冯-拉特 ⋅ 4分钟前 ⋅ 0

with 的高级用法

那么 上下文管理器 又是什么呢? 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法。with 语句开始运行时,会在上下文管理器对象上调用 __enter__ 方法。with 语句运行结束后,会在上下...

阿豪boy ⋅ 23分钟前 ⋅ 0

使用 jsoup 模拟登录 urp 教务系统

需要的 jsoup 相关 jar包:https://www.lanzous.com/i1abckj 1、首先打开教务系统的登录页面,F12 开启浏览器调试,注意一下 Request Headers 一栏的 Cookie 选项,我们一会需要拿这个 Cook...

大灰狼时间 ⋅ 23分钟前 ⋅ 0

关于线程的创建

转自自己的笔记: http://note.youdao.com/noteshare?id=87584d4874acdeaf4aa027bdc9cb7324&sub=B49E8956E145476191C3FD1E4AB40DFA 1.创建线程的方法 Java使用Thread类代表线程,所有的线程对......

MarinJ_Shao ⋅ 35分钟前 ⋅ 0

工厂模式学习

1. 参考资料 工厂模式-伯乐在线 三种工厂-思否 深入理解工厂模式 2. 知识点理解 2.1 java三种工厂 简单工厂 工厂模式 抽象工厂 2.2 异同点 逐级复杂 简单工厂通过构造时传入的标识来生产产品...

liuyan_lc ⋅ 47分钟前 ⋅ 0

Java NIO

1.目录 Java IO的历史 Java NIO之Channel Java NIO之Buffer Java NIO之Selector Java NIO之文件处理 Java NIO之Charset Java 可扩展IO 2.简介 “IO的历史”讲述了Java IO API从开始到现在的发...

士别三日 ⋅ 51分钟前 ⋅ 0

[Err] ORA-24344: success with compilation error

从txt文本复制出创建function的脚本,直接执行,然后报错:[Err] ORA-24344: success with compilation error。 突然发现脚本的关键字,居然不是高亮显示。 然后我把脚本前面的空格去掉,执行...

wenzhizhon ⋅ 今天 ⋅ 0

Spring Security授权过程

前言 本文是接上一章Spring Security认证过程进一步分析Spring Security用户名密码登录授权是如何实现得; 类图 调试过程 使用debug方式启动https://github.com/longfeizheng/logback该项目,...

hutaishi ⋅ 今天 ⋅ 0

HAProxy基于KeepAlived实现Web高可用及动静分离

前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。 ...

寰宇01 ⋅ 今天 ⋅ 0

微软自研处理器的小动作:已经开始移植其他平台的工具链

微软将 Windows 10 、Linux 以及工具链如 C/C++ 和 .NET Core 运行时库、Visual C++ 2017 命令行工具、RyuJIT 编辑器等移植到其自主研发的处理器架构 E2。微软还移植了广泛使用的 LLVM C/C++...

linux-tao ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部