Python网络编程基础

Python网络编程基础
作 者: 高森 莫迟
出版社: 电子工业出版社
丛编项:
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: Python
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  John Goerzen从1996年开始就是Debian GNU/Linux操作系统开发组的成员,最近15年他一直都在从事软件开发方面的工作。他对操作系统、程序语言和网络都很感兴趣,并且在工作中也开发并用到以上这些方面的各种软件。目前,他在一个中等规模的制造公司中担当程序员和Unix管理员,并且已经使用Python开发了很多用于公司数据系统的接口。 作为Debian工作组成员,John为系统维护了很多不同的程序。从1998年开始,他就致力于启动或向新的体系结构扩展Debian,并在Alpha、PowerPC、AMD64和NetBSD i386上取得了很大的成就。 2003年,John被选进了Software in the Public Interest(SPI)的董事会。这个公司负责管理Debian在法律和财务上的事务。同年晚些时候,他被任命为SPI的副会长。 除作为Debian工作组成员之外,John还用了大量的时间写软件。在他众所周知的作品中,有两个是用Python写的网络激活程序。OfflineIMAP是一个双向的邮件同步程序,而PyGoDherd是一个多协议的Web和Gopher服务器。这两个软件都用Python独有的特性来支持模块体系结构,并且提供了很好的灵活性。 John还写了很多书,包括那本800页的《Linux Programming Bible》。他还经常为杂志撰写文章,同时还是很多书的技术编辑。他还建立了Air Capital Linux用户组,并经常在组里演讲。

内容简介

《Python网络编程基础》全面介绍了使用Python语言进行网络编程的基础知识,主要内容包括网络基础知识、高级网络操作、Web Services、解析HTML和XHTML、XML、E-mail服务、FTP、使用Python操作数据库、SSL、几种服务器端框架(包括Socket服务器、SimpleXMLRPCServer、CGI和mod_python),以及多任务处理(包括Forking、线程和异步通信)等。本书实用性强,共提供了大约175个实例,6600行以上的代码,是帮助读者全面而快速地学习Python语言、编写网络程序的最佳实践。本书可以作为各层次Python、Web和网络程序的开发人员的参考书,在实际工作中使用书中的技术,效果更佳。 本书第1部分讨论了客户端和服务器的设计,这是所有网络应用程序的基础。您将学到如何利用IPv6的优点来编写应用程序,如何与域名服务器通信,以及如何获取网页等。 本书第2部分将向您演示如何编写发送和接收E—mail的程序、提供静态和动态网页的程序、传输文件以及其他网络程序。您将学到如何使用Apach1e的mod_python模块来建立基于Web的Python应用程序。 本书最后一部分侧重于Python网络编程高级应用方面的知识,讲解了如何使用多任务处理和无阻塞的I/O来编写可以同时处理上千个客户端的服务器程 序。在这个过程中,您将学到编写很多成功网络程序的奥秘。最重要的是,通过对超过6600行独立的、现成的代码的学习,您将能够立刻把您学到的知识应用到 实践中去。

图书目录

目录

Contents

第1章 客户/服务器网络介绍 3

理解TCP基础 3

寻址 4

可靠性 4

路由 5

安全 6

使用客户/服务器模式 6

服务器端端口号 7

客户端端口号 7

理解UDP 7

理解物理传输和以太网 9

Python网络编程 9

底层接口 10

基本客户端操作 10

错误和异常 11

文件类对象 12

基本服务器操作 13

高级接口 15

总结 17

第2章 网络客户端 19

理解Sockets 19

建立Sockets 20

寻找端口号 21

从Socekt获取信息 22

利用Sockets通信 23

处理错误 23

Socket异常 24

遗漏的错误 26

文件类对象引起的错误 29

使用UDP 31

总结 34

第3章 网络服务器 35

准备连接 35

建立Socket对象 36

设置和得到Socket选项 36

绑定Socket 39

侦听连接 39

接受连接 40

处理错误 41

使用UDP 43

使用inetd或xinetd 45

配置inetd 47

配置xinetd 48

运行例子 50

通过inetd使用Socket对象 51

通过inetd使用UDP 51

和inetd相关的错误处理 54

什么时候不应该使用inetd 55

通过syslog来记录日志 55

在Python中使用syslog 56

避免死锁 60

总结 63

第4章 域名系统 65

进行DNS查询 65

使用操作系统查询服务 66

执行基本查询 66

执行反向查询 70

反向查找基础 71

对于反向查找数据真实性的检查 72

获得环境信息 74

使用PyDNS进行高级查询 76

DNS Records 76

安装PyDNS 77

简单PyDNS查询 77

查询特殊的名称服务器 79

分解查询结果 82

总结 85

第5章 高级网络操作 87

半开放Sockets 87

超时 89

传输字符串 90

唯一字符串结束标识符 91

转义符(Escaping) 91

数据编码 92

可调整的字符串结束标识符 92

首部的大小指示器 92

理解网络字节顺序 93

使用广播数据 95

使用IPv6 97

解析地址 98

处理Family参数 100

绑定到特殊的地址 102

使用poll() 或 select()实现事件通知 104

使用select() 107

总结 109

第6章 Web客户端访问 113

获取Web页面 114

认证 115

提交表单数据 118

用GET方法提交 118

用POST方法提交 120

处理错误 121

捕获连接错误 121

捕获数据错误 123

使用非HTTP协议 125

总结 125

第7章 解析HTML和XHTML 127

理解基本的HTML解析 128

处理真实的HTML 130

翻译实体 130

转换字符参考 132

处理不均衡的标签 133

一个实际可以工作的例子 137

总结 143

第8章 XML和XML-RPC 145

理解XML文档 147

使用DOM 148

使用DOM完全解析 151

使用DOM产生文档 154

DOM类型参考 157

使用XML-RPC 159

XML-RPC自省 160

一个具有完整功能的例子 162

XML-RPC错误处理 165

XML-RPC类型处理 165

总结 166

第9章 E-Mail的编写和编码 169

E-Mail Composition and Decoding 169

理解传统信息 169

处理Header 170

Headers不会说明您的邮件 171

含有的Bcc的Headers 171

邮件列表中的Headers 172

垃圾中的Headers 172

规则的例外情况 172

显示Headers中的信息 173

撰写传统的邮件 173

添加Date和Message-ID Headers 174

解析传统邮件 176

基本邮件解析 177

解析日期 178

理解MIME 180

MIME概念 180

MIME是如何工作的 181

添加MIME附件 182

编写MIME替换方法 185

构建非英语的Header 187

组成嵌套的多部分 188

解析MIME邮件 190

解码部分 192

解码Headers 193

总结 195

第10章 简单邮件传输协议(SMTP) 197

Simple Message Transport Protocol 197

SMTP库简介 197

错误处理和会话调试 199

从EHLO中得到信息 202

使用安全Sockets层(Secure Sockets Layer,SSL)和安全传输层(Transport Layer Security,TLS) 205

认证 208

SMTP技巧 209

总结 210

第11章 POP 211

连接和认证 212

取得邮箱信息 215

下载邮件 216

删除邮件 218

总结 221

第12章 IMAP 223

理解Python中的IMAP 224

Twisted中的IMAP简介 225

理解Twisted基础 226

登录 228

错误处理 231

扫描文件夹列表 236

检查文件夹 239

Message Numbers 和. UIDs 239

邮件范围 240

总结信息 240

基本下载 243

使用一个命令下载整个一个邮箱 243

下载单独邮件 245

标记和删除邮件 249

读取标志 250

设置标志 252

删除邮件 252

取得邮件的部分内容 255

找出邮件结构 256

得到指定的部分 260

查找邮件 262

构造查询 263

执行查询 265

添加邮件 268

建立和删除文件夹 270

在文件夹之间移动邮件 270

总结 271

第13章 FTP 275

理解FTP 275

通信信道 276

认证和匿名FTP 276

用Python实现FTP功能 277

以ASCII模式下载文件 278

以二进制模式下载文件 279

以高级二进制模式下载文件 279

上传数据 281

以高级二进制模式上传 282

处理错误 283

扫描目录 284

解析UNIX目录列表 286

不用解析列表而得到信息 288

递归下载 290

操纵服务器上的文件和目录 293

删除文件和目录 293

建立目录 294

移动和重命名文件 294

总结 294

第14章 数据库客户端 295

SQL和网络 295

Python中的SQL 296

连接 297

PostgreSQL 298

MySQL 299

Jython zxJDBC 299

执行命令 301

事务 302

事件执行的性能 303

在结束前隐藏改变 303

重复指令 305

参数风格 305

使用executemany() 307

处理那些不适合executemany()的情况 308

得到数据 310

使用fetchall() 310

使用fetchmany() 311

使用fetchone() 312

阅读Metadata 313

计算行数 314

以Dictionaries形式得到数据 315

使用数据类型 317

得到指定类型的数据 319

总结 319

第15章 SSL 321

理解网络弱点 322

嗅探攻击(Sniffing) 322

插入攻击 323

删除攻击 323

重复攻击 323

截获Session 323

伪装服务器(信息转向) 324

妥协的服务器 324

人体工程学 324

使用SSL降低攻击 324

认证远程机器 325

理解Python中的SSL 326

使用内置的SSL 326

使用OpenSSL 330

使用OpenSSL验证服务器证书 331

取得根认证授权证书 332

验证证书 332

总结 338

第16章 SocketServer 341

使用BaseHTTPServer 341

处理对于特殊文档的请求 343

同时处理多个请求 346

SimpleHTTPServer 348

CGIHTTPServer 349

实现新协议 350

取得关于客户端的信息 352

IPv6 352

总结 353

第17章 SimpleXMLRPCServer 355

SimpleXMLRPCServer基础 356

测试您的服务器 358

提供函数 359

使用类的特性 361

使用DocXMLRPCServer 364

使用CGIXMLRPCRequestHandler 365

支持Multicall函数 367

总结 367

第18章 CGI 369

设置CGI 370

理解CGI 370

理解使用Python编写CGI 371

取得环境信息 373

取得输入 375

额外的URL成分 375

GET方法 378

POST方法 380

转义特殊字符 383

处理一个字段的多个输入 385

上传文件 386

使用Cookies 388

Cookies的结构 389

使用Cookies 390

总结 392

第19章 mod_python 393

理解为什么需要mod_python 393

安装和配置mod_python 394

载入模块 395

配置Apache目录 396

修复配置问题 398

理解mod_python基础 399

PythonHandler的角色 400

处理程序返回值 401

分派请求 402

处理输入 405

附加的URL部分 405

GET方法 407

POST方法 410

转义(Escaping) 412

理解解释器实例 413

在mod_python中预建立处理程序 415

总结 415

第20章 Forking 419

理解进程 419

理解fork() 421

重复的文件描述符 422

Zombie进程 423

性能 424

Forking的第一步 424

Zombie程序 425

使用信号解决Zombie问题 426

使用轮询(Polling)来解决Zombie问题 428

Forking服务器 430

锁定 433

错误处理 438

总结 441

第21章 线程 443

在Python中使用线程 444

使用共享变量 446

安全线程 447

设法访问共享的且缺乏的资源 450

避免死锁 453

编写含有线程的服务器 455

练习:使用线程的聊天服务器 457

使用线程池 457

编写含有线程的客户端 463

总结 467

第22章 网络客户端 469

决定是否使用异步I/O 470

使用异步通信 471

高级的服务器端使用 476

监控多个master socket 480

在服务器上使用Twisted 485

总结 489

索引