
Python网络编程
文章平均质量分 75
MustangJy
这个作者很懒,什么都没留下…
展开
-
Python网络编程 3.1 由简单的TCP服务器、客户端程序分析相关方法
代码如下:import argparse,socketdef recvall(sock,length): data = b'' while len(data) < length: more = sock.recv(length-len(data)) if not more: raise IOError('was exp原创 2017-11-23 19:06:43 · 765 阅读 · 1 评论 -
Python网络编程 9.2 内容、认证、Cookie、连接复用
1.传输编码理解HTTP传输编码与内容编码之间的区别是至关重要的。前者只是一个用于将资源转换为HTTP响应体的机制。显然,传输编码方式的选择不会对客户端获得的资源有任何影响。例如不管服务器发送的响应是通过Content-Length还是区块编码来封帧的,客户端接收到的文档或图片都是一样的。发送资源时,可以使用原始字节,也可以为了加快传输分速度,使用压缩后的字节,但是最终的资源内容是相同的。传输原创 2018-02-06 14:23:55 · 357 阅读 · 0 评论 -
Python网络编程 9.1 HTTP客户端方法、封帧、状态码、缓存
本章从客户端程序的角度来学习HTTP协议的使用方法。这些客户端程序需要获取或缓存文档,或者向服务器提交请求或数据。HTTP的最本质的概念形式:一种用于获取与发布文档的机制。HTTP1.1版本是目前最常用的版本。1.Python客户端库一个第三方库是Python程序员使用HTTP时的第一选择,可以替代urllib。这个库就是Kenneth Reitz写的Requests,它基于urllib3原创 2018-02-05 11:53:50 · 1435 阅读 · 0 评论 -
Python网络编程 11.3 网络抓取、Ch11小结
关于网络抓取的第一个建议是:不到迫不得已,不要进行网络抓取。除了直接进行抓取之外,还有许多可以获取数据的方法。直接使用这些数据源对程序员和网站本身来说都能减少花销。很多情况下,如果直接进行抓取,就需要解析成千上万个页面的HTML。许多网站(比如谷歌和雅虎)都提供了核心服务的API,这样用户就可以不用抓取并解析原始的HTML了。需要抓取的情况,比如,如果能够通过google搜索到需要的数据,原创 2018-02-09 17:07:13 · 397 阅读 · 0 评论 -
Python网络编程 11.2 Django和WebSocket
Django是一个全栈式的Web框架,它可能是目前在Python程序员中最流行的框架了。Django几乎提供了一个新手程序员需要的所有功能.它有一套自己的模板系统和URL路由框架,提供了与数据库的交互功能,并且以Python对象的形式来生成数据库查询结果。除此之外,使用Django时不需要使用任何第三方库就能够构造并解析表单。现在,其实很多程序员都没有经过系统的Web编程训练。使用Django这样原创 2018-02-09 13:19:08 · 3202 阅读 · 0 评论 -
Python网络编程 1.1 协议栈、编解码、IP
1.参考书及源代码所用参考书为Python网络编程(中文第三版),京东有售。源代码放在了源码-Python网络编程中。2.url:描述了网络上特定文档的位置及获取方法,url包含了协议名称、保存文档的主机名和主机上该文档的路径。3.随着使用的协议越来越底层,程序的质量会明显随之下降。因此,在项目中应该尽可能地使用标准库或第三方库,以免自己写出脆弱的代码。书中Sear原创 2017-11-23 18:58:54 · 841 阅读 · 0 评论 -
Python网络编程 11.1 Flask框架Web应用程序及安全性分析
前面我们已经知道,HTTP协议是一种通用机制。客户端使用HTTP向服务器请求文档,而服务器通过HTTP向客户端提供文档。然而,HTTP——超文本传输协议的”超文本“如何体现?其实HTTP的设计初衷并非只是将其作为一种用于传输文件的新方法,也不是将其作为旧式文件传输协议(如FTP)的一个更复杂的提供缓存功能的替代品。当然HTTP能够传输书籍、图片以及视频这些独立的文件,但是尽管如此,HTTP原创 2018-02-08 20:24:28 · 2062 阅读 · 0 评论 -
Python网络编程 8 缓存与消息队列
前面已经介绍了套接字API以及在Python中使用的基础IP网络操作来构建通信信道的方式。本章研究服务负载较重时常用的两项基本技术:缓存与消息队列。这两项技术有如下一些共同特点:都是非常强大的工具,因而广为流行。使用Memcached或一个消息队列,不是为了实现一个有趣的协议来与其他工具进行交互,二是为了编写优雅的服务来解决特定的问题。这两项技术解决的问题通常是机构内部特有的问题。我们原创 2018-02-01 19:19:59 · 675 阅读 · 4 评论 -
Python核心编程3-Web开发部分 1.Web客户端和服务器
一、简介Web应用遵循客户端/服务器架构。 常见的Web客户端是浏览器。客户端可以向Web服务器发出各种不同的的请求,这些请求可能包括获得一个用于查看的网页视图,或者提交一个包含待处理数据的表单。Web服务器端首先处理请求,然后会以特定的格式(如HTML等)返回给客户端浏览。 Web客户端和服务器端交互需要用到特定的“语言”,就是Web交互需要用到的标准协议,称为HTTP(HyperTex原创 2018-02-01 15:15:59 · 780 阅读 · 0 评论 -
Python网络编程 7.1 单线程、多线程与多进程服务器
网络服务器可以分为三大类:单线程服务器。同一时刻只能为一个客户端提供服务,此时所有其他客户端都要进行等待。这种情况下CPU很可能处在近乎空闲的状态。多线程、多进程服务器。使用多个线程/进程,每个线程或进程内都运行着一个单线程服务器。使用异步网络的服务器。在自己的代码中使用异步网络操作来支持多路复用,而不是直接使用操作系统提供的多路复用。我们可能会把网络部署到单台机器上,也可能部署到原创 2018-01-16 21:52:46 · 770 阅读 · 0 评论 -
Python核心编程3 多线程编程 简介、使用以及同步原语
在Python中,你可以启动一个线程,但却无法停止它。进程特点:独立,每一个进程拥有自己的内存和数据栈等,所以只能采用进程间通信(IPC)的方式共共享信息。线程特点:称为轻量级进程,一个进程可以拥有多个线程,它们共享相同的上下文,因此线程间的信息共享和通信更加容易。 在单核CPU中实现不了真正的并发,那么线程执行的时候会按照时分复用的方式完成伪并发。另一个需要注意的问题是,线程无原创 2018-01-30 17:33:35 · 347 阅读 · 0 评论 -
Python网络编程 4.4 小结
Python程序通常都需要将主机名转换为可以实际连接的套接字地址。多数主机名查询都应该通过socket模块的getaddrinfo()函数来完成,这是因为该函数的智能性通常是由操作系统提供的。它不仅知道如何使用所有可用的机制来查询域名,还知道本地IP栈配置支持的地址类型(IPv4或IPv6)。传统的IPv4仍然是互联网上最流行的,但是v6在变得越来越常见。通过使用getad原创 2017-12-14 16:37:05 · 259 阅读 · 0 评论 -
Python网络编程 4.3 DNS协议
DNS协议目的:解析主机名,返回IP地址标准:RFC1034、RFC1035传输层协议:UDP/IP和TCP/IP 端口号:53Python库:第三方,如dnspython3域名系统(Domain Name System)是成千上万互联网主机相互协作,对主机名与IP地址映射关系查询做出响应的原创 2017-12-12 19:00:32 · 1430 阅读 · 0 评论 -
Python网络编程 5.1 字符串、字节与其传输
1.网络通信中字节的一个特点是,套接字接口将字节暴露了出来,使得其无论是对程序员还是对应用程序都是可见的。我们通常无可避免地要考虑在传输过程中表示数据的方式。这会给我们带来一些问题,而python这种高级语言是可以让我们避免这类问题的。2.如果想通过套接字传输一个符号串,那么就需要使用某种编码方法来为每个符号分配一个确切的字节值。最流行的一个编码方式是ASCII码,定义了从0到127的原创 2017-12-21 16:20:21 · 2531 阅读 · 0 评论 -
Python网络编程 4.2 IPv6简介与现代地址解析--getaddrinfo()方法的使用
IPv6是一个地址族,与IPv4的AF_INET类似的,其地址族为AF_INET6。这将是未来的主流地址族,可以防止IP地址被耗尽的情况。同时IPv6协议对链路层安全等很多特性提供了更加完整的支持。IPv6对Python代码的影响:必须使用AF_INET6来创建套接字,且套接字名不再仅仅由地址和端口号组成,还包括提供了“流”信息和“范围”标识的额外坐标。IPv4用字节表示地址的优美形式原创 2017-12-11 17:47:20 · 2100 阅读 · 0 评论 -
Python网络编程 1.0 Virtualenv的安装及Pycharm中的布局
.转载 2017-11-23 18:56:13 · 523 阅读 · 0 评论 -
Python网络编程 4.1 主机名与套接字
通过之前的学习,我们知道,套接字是无法使用单个Python的原始类型(如数字或字符串)来命名的。而TCP和UDP都通过整形的端口号来使一台机器上运行的多个不同的应用程序共享该机器的IP地址。因此,要生成一个套接字名,要把IP地址与端口号结合起来,为一个Python元组的形式:('127.0.0.1',8080)。书中P55介绍了所有需要提供某种形式的套接字名作为参数的主要套接字方法。套接字的五个坐原创 2017-12-11 12:55:37 · 268 阅读 · 0 评论 -
Python网络编程 3.2 可能出现死锁的tcp服务器、客户端
源代码可以在书的作者的github上找到,也可以参考本人GitHub中参考源代码改出来的代码点击打开链接 tcp_deadlock.py1) 死锁的原因:首先,客户端使用sendall()发送数据块,然后服务器使用recv()来接收、处理,接着将数据转换为大写,并再次使用sendall()调用将结果传回。当传输并不多的数据的时候,可以正常运行,但是传输很大的数据的时候就会出问题。因为,由于客户原创 2017-12-10 20:58:26 · 1002 阅读 · 0 评论 -
Python网络编程 10.1 HTTP服务器:WSGI模式
前面我们已经学习了编写基于TCP的Web服务器时使用的一些基本套接字和并发模式。HTTP协议的广为流行使得许多现成的解决方案应运而生,这些解决方案实现了我们可能需要的所有主要的服务器模式。因此,在使用HTTP时,我们几乎不太可能会编写任何底层的代码。本章将着眼于服务器架构和部署,介绍编写服务器代码时需要解决的问题。无论是向客户端返回文档还是返回面向程序员的APi,这些问题都不可避免。1.W原创 2018-02-06 21:18:26 · 1082 阅读 · 1 评论