python网络爬虫网页前端编程基础、Socket库、使用Socket进行TCP编程、认识HTTP协议、熟悉Cookie等。_python的socket库(1)

认识Python网络编程

Python网络编程Socket库

1. socket协议类型

2. socket函数

使用Socket进行TCP编程

1. 服务器端TCP连接

2. 客户端TCP连接

使用Socket进行UDP编程

1. 服务器端UDP连接

2. 客户端UDP连接

认识HTTP协议

HTTP请求方式与过程

1. 请求方法

2. 请求(request)与响应(response)

​编辑

常见HTTP状态码

1. HTTP状态码种类

1. HTTP头部类型

熟悉Cookie

1. Cookie机制

2. Cookie的存储方式

3. Cookie的实现过程

小结


认识Python网络编程

Python网络编程Socket库

套接字(socket)

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

套接字是socket的通常叫法,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。

Python中Socket库为操作系统的socket实现提供了一个Python接口。

1. socket协议类型

socket库中整合了多种协议类型。

socket协议类型描述
socket.AF_UNIX用于同一台机器上的进程通信(本地通信)
socket.AF_INET用于服务器与服务器之间的网络通信
socket.AF_INET6基于IPV6方式的服务器与服务器之间的网络通信
socket.SOCK_STREAM基于TCP的流式socket通信
socket.SOCK_DGRAM基于UDP的数据报式socket通信
socket.SOCK_RAW原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次SOCK_RAW也可以处理特殊的IPV4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头
socket.SOCK_SEQPACKET可靠的连续数据包服务
2. socket函数

服务器端Socket函数:socket库中的服务器端函数仅供服务器使用。

语法格式描述
socket.bind(address)将套接字绑定到地址,在AF_INET协议下,以tuple(host,port)的方式传入,如socket.bind((host,port)),其中host为绑定的地址,port为监听的端口
socket.listen(backlog)开始监听TCP传入连接,backlog指定在拒绝链接前,操作系统可以挂起的最大连接数,该值最少为1,大部分应用程序通常设为5
socket.accept()接受TCP链接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据,address是链接客户端的地址

客户端Socket函数:socket库中的客户端函数仅供客户端使用。

语法格式描述
socket.connect(address)连接到address处的套接字,一般address的格式为tuple(host,port),若连接出错,则返回socket.error错误
socket.connect_ex(address)功能与socket.connect相同,但成功返回0,失败返回error的值

公共Socket函数:socket库中的公共函数即可在服务器端使用也可在客户端使用,为通用函数。

语法格式描述
socket.recv(buffsize[,flag])接受TCP套接字的数据,数据以字符串形式返回,buffsize指定要接受的最大数据量,flag提供有关消息的其他信息,通常可以忽略
socket.send(string[,flag])发送TCP数据,将字符串中的数据发送到链接的套接字,返回值是要发送的字节数量,该数量可能小于string的字节大小
socket.sendall(string[,flag])完整发送TCP数据,将字符串中的数据发送到链接的套接字,但在返回之前尝试发送所有数据。成功返回None,失败则抛出异常
socket.recvfrom(bufsize[,flag])接受UDP套接字的数据,与recv函数类似,但返回值是tuple(data,address)。其中data是包含接受数据的字符串,address是发送数据的套接字地址
socket.sendto(string[,flag],address)发送UDP数据,将数据发送到套接字,address形式为tuple(ipaddr,port),指定远程地址发送,返回值是发送的字节数
socket.close()关闭套接字

公共Socket函数:socket库中的公共函数即可在服务器端使用也可在客户端使用,为通用函数。

语法格式描述
socket.getpeername()返回套接字的远程地址,返回值通常是一个tuple(ipaddr,port)
socket.getsockname()返回套接字自己的地址,返回值通常是一个tuple(ipaddr,port)
socket.setsockopt(level,optname,value)设置给定套接字选项的值
socket.getsockopt(level,optname[,buflen])返回套接字选项的值

公共Socket函数:socket库中的公共函数即可在服务器端使用也可在客户端使用,为通用函数。

语法格式描述
socket.settimeout(timeout)设置套接字操作的超时时间,timeout是一个浮点数,单位是秒,值为None时表示永远不会超时。超时时间应在刚创建套接字时设置,因为它们可能用于连接的操作,如s.connect()
socket.gettimeout()返回当前超时值,单位是秒,如果没有设置超时则返回None
socket.fileno()返回套接字的文件描述
socket.makefile()创建一个与该套接字相关的文件

使用Socket进行TCP编程

TCP连接由客户端发起,服务器对连接进行响应。 建立一个服务器,服务器进程需要绑定一个端口并监听来自其他客户端的连接。 若有客户端发起连接请求,服务器就与该客户端建立Socket连接,随后的通信就通过此Socket连接进行。 服务器依赖服务器地址,服务器端口,客户端地址,客户端端口这4项来唯一确定一个Socket连接。

1. 服务器端TCP连接

建立服务器端的TCP连接,具体步骤如下。

在Python中创建一个基于IPv4和TCP协议的Socket。

绑定监听的地址和端口,地址使用本机地址“127.0.0.1”或“local host”,使用大于1024的端口。

调用listen方法开始监听端口,传入的参数指定等待连接的最大数量,设定为5。

创建一个tcp函数,该函数在连接建立后,服务器端首先发出一条表示连接成功的消息,然后等待客户端数据,再加上欢迎信息发送给客户端。若客户端发送exit字符串,则直接关闭连接。

通过一个循环接受来自客户端的连接,使用accept函数等待并返回一个客户端的连接,每个连接都分配一个新线程来处理。

2. 客户端TCP连接

在服务器端TCP连接建立后,建立客户端TCP连接进行测试,具体步骤如下。

与服务器端的协议保持一致,也建立一个基于IPv4和TCP协议的Socket。

与服务器端建立连接,连接的地址与端口需与服务器端保持一致。

使用recv函数接受服务器提示信息,之后再使用send函数发送数据至服务器,可看到服务器返回的结果。

TCP建立的连接可靠,通信双方以流的形式互相传送数据。相对TCP协议,UDP则是面向无连接的协议。

使用UDP协议时,无需建立连接的过程,仅需知道对方的IP地址及端口号,便可直接发送数据包,但无法保证能顺利传达到。

虽然用UDP传输数据不可靠,但其传输速度比TCP快,对于不要求可靠到达的数据,就可以使用UDP协议。

UDP传输通常应用在通讯实时性要求更高于可靠性场景,例如网络游戏。

使用Socket进行UDP编程

1. 服务器端UDP连接

UDP连接与TCP连接类似,也分为服务器端和客户端,不同的是UDP连接无需调用listen方法,直接接受来自任何客户端的数据。

建立UDP连接,服务器端同样需要绑定地址与端口。

使用recvfrom方法返回数据及客户端的地址与端口。

当服务器收到数据后,直接调用sendto把数据用UDP发给客户端。

2. 客户端UDP连接

客户端使用UDP连接时同样需要先创建socket。

之后无需使用connect方法,直接用sendto方法发送数据至服务器建立UDP连接,服务器端同样需要绑定地址与端口。

UDP连接与TCP连接可同时使用同一端口互不冲突,两者使用的端口是独立绑定的。

认识HTTP协议

HTTP请求方式与过程

爬虫在爬取数据时将会作为客户端模拟整个HTTP通信过程,该过程也需要通过HTTP协议实现。HTTP请求过程如下。

由HTTP客户端向服务器发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。

HTTP服务器从该端口监听客户端的请求。

一旦收到请求,服务器会向客户端返回一个状态,比如“HTTP/1.1 200 OK”,以及返回的响应内容,如请求的文件、错误消息、或其它信息。

1. 请求方法

在HTTP/1.1协议中共定义了8种方法(也叫“动作”)来以不同方式操作指定的资源,常用方法有GET、HEAD、POST等。

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值