前言

很高兴看到本书出版了,我要感谢所有为本书的出版做出贡献的人。本书是Python网络编程方面的探索性指南,涉及了很多网络协议,例如TCP/UDP、HTTP/HTTPS、FTP、SMTP、POP3、IMAP、CGI等。Python功能强大且具交互性,用它来开发解决实际问题的脚本是一种享受,比如处理网络和系统管理操作、开发Web应用、与本地和远程网络交互、捕获并分析低层网络数据包,等等。本书的主要目的是教你动手完成这些任务,因此不会涉及太多理论,而是注重实践。

写作本书的过程中我一直记着要遵守“开发运维”的理念,开发者或多或少都要负责一些运维,即部署应用程序以及管理它的方方面面,例如管理远程服务器、监控、扩放以及性能优化等。书中用到了很多第三方开源Python库,有效解决了多种不同的问题。其中很多库我每天都用,通过它们自动化运行开发和运维任务简直是一种享受。例如,我使用Fabric自动完成软件开发过程中的任务。其他库也各有各的用处,例如搜索互联网、屏幕抓取、在Python脚本中发送电子邮件。

希望你能从本书的攻略中受益,并根据需求扩展它们,让其功能更强大,用起来更得心应手。

本书内容

第1章“套接字、IPv4和简单的客户端/服务器编程”通过多个小型任务讲解Python的核心网络库,教你开发一个客户端/服务器程序。

第2章“使用多路复用套接字I/O提升性能”讨论很多使用内置库和第三方库扩放客户端/服务器程序的实用技术。

第3章“IPv6、Unix域套接字和网络接口”主要关注本地设备的管理和本地网络的维护。

第4章“HTTP协议网络编程”开发一个多功能迷你命令行浏览器,可以提交表单、处理cookie、管理分段下载、压缩数据,还能通过HTTPS交付安全内容。

第5章“电子邮件协议、FTP和CGI编程”带你一起体验自动处理FTP和电子邮件相关任务的乐趣,例如管理Gmail账户、使用脚本收发邮件,还要为Web应用开发一个留言板。

第6章“屏幕抓取和其他实用程序”介绍如何使用多个第三方Python库实现一些实际的任务,例如在谷歌地图上找到公司的位置、从维基百科中抓取信息、在GitHub中搜索代码仓库,以及从BBC读取新闻。

第7章“跨设备编程”带你体验如何使用SSH自动执行系统管理和部署任务。使用SSH,在你的笔记本电脑上就可以远程执行命令、安装包,或者架设新网站。

第8章“使用Web服务:XML-RPC、SOAP和REST”介绍不同的API协议,例如XML-RPC、SOAP和REST。使用这些协议可以通过编程的方式从任何网站或Web服务中读取信息,或者与之交互。例如,可以在亚马逊或谷歌中搜索商品。

第9章“网络监控和安全性”介绍捕获、存储、分析和处理网络数据包的多种技术。了解这些技术之后,你就能使用简洁的Python脚本分析并解决网络安全问题。

阅读本书前的准备工作

你要有一个可以使用的个人电脑或者笔记本电脑,最好安装了某种现代Linux操作系统,例如 Ubuntu、Debian或CentOS等。书中大部分攻略也能在其他平台上运行,例如Windows和Mac OS。

你还需要连接互联网,以便安装攻略中提到的第三方软件库。如果不方便上网,可以下载所有第三方库,一次性安装好。

下面列出本书使用的第三方库及其下载地址。

运行某些攻略还要用到一些非Python软件,如下所示。

本书读者

如果你是网络程序员、系统/网络管理员或者Web程序开发者,本书是理想之选。你应该对Python编程语言和TCP/IP的概念有个基本的了解。不过,对初学者来说,在阅读本书的过程中也能加强对这些概念的理解。本书也可作为网络编程课程的参考材料,用来培养实践操作能力。

排版约定

阅读本书时你会发现不同类别的信息使用了不同的文本样式,下面举例说明其中一些样式,及其表示的含义。

文本中的代码、数据库表名、文件扩展名和用户输入使用下述方式表示:

如果想知道远程设备的IP地址,可以使用内置的库函数gethostbyname()

代码块的表示方法如下:

  1. def test_socket_timeout():
  2. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  3. print "Default socket timeout: %s" %s.gettimeout()
  4. s.settimeout(100)
  5. print "Current socket timeout: %s" %s.gettimeout()

命令行输入和输出的表示方法如下:

  1. $ python 2_5_echo_server_with_diesel.py --port=8800
  2. [2013/04/08 11:48:32] {diesel} WARNING:Starting diesel <hand-rolled select.epoll>

读者反馈

我们始终期待收到读者的反馈。请让我们知道你对这本书的看法,喜欢哪些内容,不喜欢哪些内容。读者的反馈对我们来说十分重要,这样我们才能出版读者最需要的图书。

常规反馈请通过电子邮件发到feedback@packtpub.com,在邮件主题中请注明书名。

如果你是某方面的专家,有兴趣写一本书,或者想为其他书做贡献,请阅读我们的作者指南,地址是www.packtpub.com/authors

客户支持

现在你已经拥有了一本由Packt出版的书,为了让你的付出得到最大回报,我们还为你提供了其他方面的服务。

下载示例代码

如果你是通过http://www.packtpub.com的注册账户购买的图书,可以从该账户中下载相应Packt图书的示例代码。如果你是从其他地方购买的本书,可以访问http://www.packtpub.com/support,注册账户后,我们将会为你发送一封附有示例代码文件的电子邮件。

勘误

虽然我们会全力确保书中内容的准确性,但错误仍在所难免。如果你在某本书中发现了错误(文字错误或代码错误),而且愿意向我们提交这些错误,我们感激不尽。这样不仅可以消除其他读者的疑虑,也有助于改进后续版本。若想提交你发现的错误,请访问http://www.packtpub.com/submit-errata,在“Errata Submission Form”(提交勘误表单)中选择相应图书,输入勘误详情。勘误通过验证之后将上传到Packt网站,或添加到现有的勘误列表中。若想查看某本书的现有勘误信息,请访问http://www.packtpub.com/support,选择相应的书名。

举报盗版

对所有媒体来说,互联网盗版都是一个棘手的问题。Packt很重视版权保护。如果你在互联网上发现我们公司出版物的任何非法复制品,请及时告知我们网址或网站名称,以便我们采取补救措施。

如果发现可疑盗版材料,请通过copyright@packtpub.com联系我们。

你的举报可以帮助我们保护作者权益,也有利于我们不断出版高品质的图书。我们对你深表感激。

疑难解答

如果你对本书的任何内容存有疑问,请发送电子邮件到questions@packtpub.com,我们会尽力解决。