Python全栈开发:数据分析
上QQ阅读APP看书,第一时间看更新

1.2.2 HTTP请求和响应

1.HTTP请求

HTTP请求是由客户端向服务器发送的相关数据,其可以分为4部分内容,即请求方法(Request Method)、请求网址(Request URL)、请求头(Request Headers)和请求体(Request Body)。

1)请求方法

当在浏览器中输入URL并按Enter键时,便会以某种请求方法发起一个HTTP请求,常用的请求方法如表1-1所示。

表1-1 常用的请求方法

2)请求网址

请求网址,即统一资源定位符URL,通过请求网址可以唯一确定所请求的资源。

URL通常由4部分组成,即协议、主机、端口和路径,其一般的语法格式如下:

     protocol://hostname[:port]/path/[;parameters][?query]#fragment

其中,protocol表示协议;hostname表示主机名;port表示端口号;path表示路径;parameters表示参数;query表示查询;fragment表示信息片断。

3)请求头

由于HTTP是一种无状态协议,所以需要在请求头中添加相关的首部字段,使服务器明确客户端的目的,其常用的首部字段包括Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Cookie、Expect、From、Host、Proxy-Authorization、Referer和User-Agent等。

4)请求体

请求体的内容一般通过请求方法POST所提交的数据获得。

2.HTTP响应

HTTP响应是由服务器返回客户端的相关数据,其可以分为3部分内容,即响应状态码(Status Code)、响应头(Response Headers)和响应体(Response Body)。

1)响应状态码

响应状态码如表1-2所示,共分为5种:1xx,表示临时响应,并需要客户端继续执行操作;2xx,表示服务器成功处理了请求;3xx,表示重定向,需要进一步操作以完成请求;4xx,表示客户端的请求可能出错,影响了服务器的处理;5xx,表示服务器在尝试处理客户端的请求时发生了内部错误,而这些错误可能是服务器本身的错误,并不是客户端的请求出错。

表1-2 响应状态码

续表

续表

2)响应头

响应头包含了服务器对客户端请求的应答信息,其常用的首部字段包括Age、Expires、ETag、Last-Modified、Location、Server、Set-Cookie、Transfer-Encoding和X-Content-Type-Options等。

3)响应体

根据所选择资源的类型,服务器返回客户端的相关数据全部在响应体中。正因为如此,在编写网络爬虫时,主要通过响应体获取网页的源代码或JSON数据,并可以进一步从中提取所需要的内容。

3.HTTP请求和响应的过程

下面通过访问一个网站来具体了解HTTP请求和响应的过程。

首先打开Chrome浏览器,右击并选择“检查”即可打开浏览器的开发者工具面板,然后在网址栏输入URL“http://www.oldxia.com”并按Enter键,此时就可以看到该URL所对应的网站页面了,而在这个过程中,浏览器向网站所在的服务器发送了一个请求,服务器接收到这个请求后进行相应处理,并返回响应的结果,包括HTML、图片、声频或视频等,最后浏览器再进行解析,这样就可以将网页的内容展现出来了。

单击开发者工具面板中的Network选项,该选项由5部分组成,如图1-1所示,一是Controls(控制器),用于控制Network选项的外观和功能;二是Filters(过滤器),用于控制Requests Table(请求列表)的具体显示内容;三是Overview(概览),用于显示HTTP请求和响应的时间轴信息;四是Requests Table(请求列表),用于按资源获取的先后顺序显示所有获取的资源信息;五是Summary(概要),用于显示总的请求数、数据传输量和加载时间等信息。

而Requests Table(请求列表)中的每条资源信息都表示进行了一次HTTP请求和响应。

下面再来详细了解Requests Table(请求列表)中每列的具体含义,如表1-3所示。

图1-1 Network选项

表1-3 Requests Table中列的含义

此时,单击第1条资源www.oldxia.com,进而可以查看该资源的详细情况,其由6部分组成,如图1-2所示。

1)Headers

该部分表示资源的HTTP头信息,其包含6部分内容,具体如下:

(1)General,该信息表示HTTP请求和响应过程中的基本信息,具体如表1-4所示。

表1-4 General

图1-2 资源的详细情况

(2)Response Headers,该信息表示响应头,其常用的首部字段如表1-5所示。

表1-5 Response Headers中常用的首部字段

(3)Request Headers,该信息表示请求头。请求头是HTTP请求的重要组成部分,在编写网络爬虫时,多数情况下需要设置请求头,其常用的首部字段如表1-6所示。

表1-6 Request Headers中常用的首部字段

(4)Query String Parameters,该信息表示发起GET请求时所传递的参数。

(5)Form Data,该信息表示发起POST请求时所传递的参数。

(6)Request Payload,该信息表示发起POST请求时所传递的参数,数据格式为JSON。

这里需要注意的是,Form Data和Request Payload中的数据就是请求体(Request Body)。

2)Preview

根据所选择资源的类型显示相对应的预览信息。

3)Response

根据所选择资源的类型显示相对应的响应内容。该响应内容就是响应体(Response Body),也是解析的目标。

4)Initiator

显示请求的依赖关系,以及发出请求的原因。

5)Timing

显示资源在整个请求生命周期中各部分所花费的时间。

6)Cookies

显示所选择资源请求和响应过程中存在的Cookie信息。

4.HTTP请求和响应过程中的Cookie

单击开发者工具面板中的Application选项,然后单击该选项左侧Storage中的Cookies,即可查看客户端中的Cookie,如图1-3所示。

图1-3 Application选项

表1-7中的每条信息表示1条Cookie,其所对应每列的具体含义如表1-7所示。

表1-7 Cookie中列的含义