爬虫 | 浅析HTTP协议

Posted 气象杂货铺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫 | 浅析HTTP协议相关的知识,希望对你有一定的参考价值。

爬虫就是模拟浏览器向服务器发送请求,然后获得相应的过程。而在这种通信过程中,HTTP协议起到至关重要的作用。对HTTP协议的理解对于掌握爬虫来说也是关键的一环。


什么是HTTP协议?



实际发生过程是:


HTTP协议规定,客户端发起请求,服务器端根据请求内容返回响应。而且请求方只能是客户端,服务器端只能作为响应方,这种关系不能颠倒。


并不是任何形式的请求都会获得响应。客户端在发送请求时需要满足一定要求,而服务器端也要按照指定形式返回响应给客户端。


注意:

HTTP是无状态协议,即HTTP协议不会存储请求和响应之间的通信状态。

为了解决客户端和服务器端无法维持通信状态的问题,后来就引入了 Cookie来存储客户端和服务器端状态。


用于HTTP协议交互的信息称为HTTP报文。客户端发送的报文称为请求报文,服务器端的报文叫做响应报文。下面分别说一下HTTP请求与HTTP响应:


HTTP请求


HTTP请求报文由请求行,请求首部,请求主体构成。而请求行由请求方法,请求URI,HTTP协议版本构成。


请求行


请求方法


常用的请求方法有 GET,POST,PUT,HEAD等。其中GET方法用于获取资源,即从给定的URI获取资源。大多数爬虫使用的都是GET方法获取资源。


POST方法和GET方法很相似,主要用来传输数据,比如要用到表单输出时,使用爬虫时很少使用此方法。


PUT 方法用于传输文件,在使用爬虫时往往是要获取信息,因此也很少能用到此方法。


HEAD 方法和 GET 方法一样,只是不返回报文主体。主要用于验证URI有效性等。


注意:


比如要爬取必应的每日图片,那么这里的URL就是 https://cn.bing.com。


请求URI


使用爬虫时指定的 链接。


协议版本


使用爬虫时可以直接指定协议版本信息即可。


请求首部


因为请求行所包含的信息是有限的,因此客户端要提供给服务器端的一些额外信息就只能放在首部进行传递。比如:客户端类型 (User-Agent),请求语言(Accept-Language),连接(Connection),缓存等信息。


客户端信息是用来确认你使用的浏览器类型及版本,有些反爬虫机制就可以通过客户端信息来确定请求是由爬虫还是浏览器发起的。


请求首部的形式和python中的字典非常相似,都是以 键值对 的形式给出的。


请求主体


报文主体中包含的信息是客户端要发送给服务器端的数据。比如用户名和密码信息。在网站注册时需要提交的一些表单信息就是报文主体的内容。


HTTP响应


服务器端接收到客户端请求之后,根据请求内容会进行处理,然后确定返回给客户端的响应内容。响应由状态行,响应首部,响应主体构成。


状态行


状态行表示的是响应结果的状态码,原因短语和HTTP版本。


状态码描述的是请求的结果,通常由3为数字组成。第一位数字指定了响应的类别:


  • 1XX : 信息性状态码,表示接收的请求正在处理

  • 2XX : 成功状态码,表示请求正常处理完成

  • 3XX : 重定向状态码,表示完成请求需要进行附加操作

  • 4XX : 客户端错误状态码,表示服务器无法处理请求

  • 5XX : 服务器错误状态码,表示服务器处理请求出错


4XX 客户端错误主要有以下几种情况:


  • 400  : 表示请求报文中存在语法错误

  • 401  : 表示请求需要要包含通过HTTP认证的信息

  • 403  : 表示请求被拒绝,没有权限访问此URI资源

  • 404  : 表示未发现指定资源


5XX 服务器错误信息有:


  • 500  : 表示服务器吹请求时发生了错误

  • 503  : 表示服务器暂时不可用或正停机维护


响应首部


和请求首部类似,包含的都是一些额外补充信息。


响应主体


我们用浏览器打开网页的时候真正返回的内容就在这一部分。可以是html文件,一张图片或是视频文件等。


关于HTTP协议的内容就说到这吧,HTTP协议的内容非常的多,想要深入了解的话建议看HTTP权威指南。


以上是关于爬虫 | 浅析HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议浅析(下): 使用HTTP协议实现通信

HTTP协议安全性浅析

HTTP协议交互过程及内容格式浅析

流量安全之HTTPS协议浅析

HTTP协议浅析

浅析HTTP协议的请求报文和响应报文