解读爬虫中HTTP的秘密基础篇

在学习爬虫的过程中,相信大家对HTTP这个词已经不陌生了,它好像从未离开过我们的视线。被迫所需,我们每次都要使用开发者工具去查看请求头,响应头,以及头中的各个字段,使用别人封装好的模块填入信息,敲几行代码就解决了。面对简单的爬取任务,我们也许根本不用管它是什么,但可能等我们真正遇到问题的时候,却无从下手。

认识并深刻理解HTTP对于爬虫的实现过程是非常有帮助的。为了更好的让大家理解爬虫中的HTTP,博主将分为两篇对HTTP进行讲述,基础篇和高阶篇。本篇为基础篇,将从以下几个部分进行阐述。

什么是HTTP一个完整的HTTP请求过程HTTP请求报文什么是HTTP?HTTP的介绍

引自百度百科的权威回答:

超文本传输协议(HTTP,HyprTxtTransfrProtocol)是互联网上应用最为广泛的一种网络协议。所有WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。年美国人TdNlson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hyprtxt),这成为了HTTP超文本传输协议标准架构的发展根基。TdNlson组织协调万维网协会(WorldWidWbConsortium)和互联网工程工作小组(IntrntEnginringTaskForc)共同合作研究,最终发布了一系列的RFC,其中著名的RFC定义了HTTP1.1。HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

HTTP的模型

HTTP采用了浏览器/服务器这种请求/响应模型,浏览器永远是HTTP请求的发起者,服务器为响应者。

这样在浏览器客户端没有发起请求的情况下,服务器是不能主动推送消息给客户端的。

HTTP的定位

HTTP是一个应用层协议,是我们想从服务器端获取信息的最直观的请求。比如,在爬虫中使用的urllib模块,rqusts模块等都是封装了HTTP协议,作为一个HTTP客户端实现了博文,图片,视频等信息源的下载。

但是HTTP也不是直接就可以用的,它的请求是建立在一些底层协议的基础上完成的。如TCP/IP协议栈中,HTTP需要TCP的三次握手连接成功后才能向服务器发起请求。当然,如果是HTTPS的话,还需要TSL和SSL安全层。

一个完整的HTTP请求过程

既然HTTP协议需要建立在其它底层协议基础上,我们来看看一个完整的HTTP请求是什么样的。

当我们点击一个链接或者输入一个链接的时候,整个HTTP的请求过程就开始了,然后经过以下步骤得到最后的信息,我们这里简单介绍一下前四个步骤,旨在了解HTTP。

域名解析:首先会搜索各种本地DNS缓存,如果没有就会向DNS服务器(互联网提供商)发起域名解析,以获取IP地址。建立TCP连接:当获取IP后,将创建套接字sockt连接,也就是TCP的次握手连接,默认端口号80。HTTP请求:一旦TCP连接成功后,浏览器/爬虫就可以向服务器发起HTTP请求报文了,报文内容包含请求行、请求头部、请求主体。服务器响应:服务器响应,并返回一个HTTP响应包(如果成功会返回状态码00)和请求的HTML代码。

上面的步骤和可以简单的示意如下,更方便大家理解。其中,请求和响应都包含特定格式的信息,具体我们接下来会继续解读。

响应HTTP请求会返回响应状态码,根据状态码可以知道返回信息的状态。状态码规定如下:

1xx:信息响应类,表示接收到请求并且继续处理——必须继续发出请求——要求服务器根据请求转换HTTP协议版本xx:处理成功响应类,表示动作被成功接收、理解和接受00——交易成功01——提示知道新文件的URL0——接受和处理、但处理未完成0——返回信息不确定或不完整0——请求收到,但返回信息为空05——服务器完成了请求,用户代理必须复位当前已经浏览过的文件06——服务器已经完成了部分用户的GET请求xx:重定向响应类,为了完成指定的动作,必须接受进一步处理00——请求的资源可在多处得到01——删除请求数据0——在其他地址发现了请求数据0——建议客户访问其他URL或访问方式0——客户端已经执行了GET,但文件未变化05——请求的资源必须从服务器指定的地址得到06——前一版本HTTP中使用的代码,现行版本中不再使用07——申明请求的资源临时性删除xx:客户端错误,客户请求包含语法错误或者是不能正确执行00——错误请求,如语法错误01——未授权0——保留有效ChargTo头响应0——禁止访问0——没有发现文件、查询或URl05——在Rqust-Lin字段定义的方法不允许06——根据发送的Accpt,请求资源不可访问07——用户必须首先在代理服务器上得到授权08——客户端没有在指定的时间内完成请求09——对当前资源状态,请求不能完成10——服务器不再有此资源且无进一步地址11——服务器拒绝用户定义的Contnt-Lngth1——一个或多个请求头字段在当前请求中错误1——请求的资源大于服务器允许的大小1——请求的资源URL长于服务器允许的长度15——请求资源不支持请求项目格式16——请求中包含Rang请求头字段,在当前请求资源范围内没有rang指示值,请求也不包含If-Rang请求头字段17——服务器不满足请求Expct头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。5xx:服务端错误,服务器不能正确执行一个正确的请求——内部服务器错误——未实现50——网关错误

HTTP请求报文

相信你已经对HTTP的请求过程有了大致的了解了,下面我们来详细介绍HTTP请求的报文信息。报文内容包含请求行、请求头部、请求主体。

下面我们来看一下通过开发者工具请求


转载请注明:http://www.aierlanlan.com/grrz/6584.html