1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【Python网络蜘蛛】:基础 - HTTP基本原理

【Python网络蜘蛛】:基础 - HTTP基本原理

时间:2024-02-23 19:17:50

相关推荐

【Python网络蜘蛛】:基础 - HTTP基本原理

文章目录

1.1 HTTP基本原理1. URI和URL2. HTTP和HTTPS3. HTTP请求过程4. 请求5. 响应

1.1 HTTP基本原理

1. URI和URL

URI为统一资源标识符,URL为统一资源定位符。

举个例子理解:/favicon.ico 既是一个URI,也是一个URL,即有一个图标资源favicon.ico,我们用URI/URL指定了访问它的唯一方式,其中包括访问协议https、访问路径和资源名称。通过一个链接,便可以从互联网中找到某个资源,这个链接就是URI/URL。

URL是URI的子集,即每个URL都是URI,但并非每个URI都是URL。

2. HTTP和HTTPS

在爬虫中,我们抓取的页面通常是基于http或https协议的。

HTTP:中文名为超文本传输协议,其作用是把超文本数据从网络传输到本地浏览器,能够保证高效而准确地传输超文本文档。

HTTPS:全称是Hypertext Transfer Protocol over Secure Socket Layer,是以安全为目标地HTTP通道,简单讲就是HTTP的安全版,即在HTTP下加入SSL层,简称HTTPS。

(HTTPS的安全基础是SSL,因此通过该协议传输的内容都是经过SSL加密的)

3. HTTP请求过程

在浏览器地址栏中输入一个URL,按下回车之后便可观察到对应的页面内容。实际上,这个过程是浏览器先向网站所在的服务器发送一个请求,网站服务器接收到请求后对其进行处理和解析,然后返回对应的响应,接着传回浏览器。

为了更直观地说明上述过程,这里用Chrome浏览器开发者模式下的Network监听组件来做一下演示。

打开Chrome浏览器,访问百度,鼠标右键,点击“检查”,点击Network

先观察第一个网络请求,即,其中各列的含义如下。

第一列Name:请求的名称。一般用URL的最后一部分内容作为名称。第二列Status:响应的状态码。这里显示为200,代表响应是正常的。通过状态码,我们可以判断发送请求之后是否得到了正常的响应。第三列Protocol:请求协议类型。这里http/1.1代表HTTP1.1版本,h2代表HTTP2.0版本。第四列Type:请求的文档类型。这里document,代表我们这次请求是一个HTML文档,内容是一些HTML代码。第五列Initiator:请求源。用来标记请求是由哪个对象或进程发起的。第六列Size:从服务器下载的文件或请求资源的大小。如果资源是从缓存中取得的,则该列会显示from cache。第八列Waterfall:网络请求的可视化瀑布流。

4. 请求

请求分为四部分内容:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)。

4.1 请求方法

用于标识请求客户端请求服务端的方式,常见的请求方法有两种:GET和POST

举例理解:在百度引擎中搜索Python就是一个GET请求,链接为 /s?wd=Python,其中URL中包含了请求的query信息,这里的参数wd表示要搜寻的关键字。POST请求大多在提交表单时发起。例如,对于一个登录表单,输入用户名和密码后,单击“登录”按钮,这时通常会发起一个POST请求,其数据通常以表单的形式传输,而不会体现在URL中。

GET和POST请求方法的区别:

GET请求中的参数包含在URL里面,数据可以在URL中看到;而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。

4.2 请求的网址

请求的网址,它可以唯一确定客户端想请求的资源,即URL。

4.3请求头

简要说明一些常用的请求头信息:

Accept:请求报头域,用于指定客户端可接受哪些类型的信息。Accept-Language:用于指定客户端可接受的语言类型。Accept-Encoding:用于指定客户端可接受的内容编码。Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。从 HTTP1.1版本开始,请求必须包含此内容。Cookie:也常用复数形式Cookies,这是网站为了辨别用户,进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,之后每次刷新或请求该站点的其他页面,都会发现处于登录状态,这就是Cookie的功劳。Cookie里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上 Cookie并将其发送给服务器,服务器通过Cookie识别出是我们自己。并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。Referer:用于标识请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。User-Agent:简称UA,这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息。做爬虫时如果加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出来。Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型。

4.4 请求体

请求体,一般承载的内容是POST请求中的表单数据,对于GET请求,请求体为空。

例如,登录GitHub时捕获到的请求和响应如下图所示:

登录之前,需要先填写用户名和密码信息,登录时这些内容会以表单数据的形式提交给服务器,此时需要注意Request Headers 中指定Content-Type 为 application/x-www-form-urlencoded。只有这样设置Content-Type,内容才会以表单数据的形式提交。另外,也可以将Content-Type 设置为application/json来提交json数据,或者设置为multipart/form-data来上传文件。

5. 响应

5.1 响应状态码

常见的错误状态码及错误原因:

5.2 响应头

响应头,包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等。下面简要说明一些常用的响应头信息。

Date:用于标识响应产生的时间。Last-Modified:用于指定资源的最后修改时间。Content-Encoding:用于指定响应内容的编码。Server:包含服务器的信息,例如名称、版本号等。Content-Type:文档类型,指定返回的数据是什么类型,如 texthtml 代表返回 HTML 文档,application/x-javascript代表返回JavaScript文件,image/jpeg代表返回图片。Set-Cookie:设置Cookie。响应头中的Set-Cookie用于告诉浏览器需要将此内容放在Cookie中,下次请求时将Cookie携带上。Expires:用于指定响应的过期时间,可以让代理服务器或浏览器将加载的内容更新到缓存中。当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载、缩短加载时间的目的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。