这一篇文章我将以打比喻的方式来说明网络请求中的各个名词。
如果把整个网络比作现实世界,那么可以把各个网站比作各个建筑。比如爱奇艺就可以理解为一座电影院,淘宝可以理解为一个商城。
那么这里我给大家介绍什么是 http,headers、cookies、post、get。
这几个单词将贯彻我们写爬虫程序的始终。
网络请求
一次网络请求的过程,就是我们访问一个页面、打开一个网站的经过。
一次网络请求由以下几部分组成:
请求的地址:url,就是我们常说的网址(必须的组成部分)
协议:http(必须的组成部分)
头部信息:headers(必须的组成部分)
cookies(非必须)
请求方式:post/get(必须的组成部分)
http
http是一种网络协议。它规定了网络上两个网络节点彼此该如何访问。
headers
几乎每个网站都会需要知道网站访问者是谁,就比如说一个电影院工作人员需要知道进入电影院的是人还是小狗,是学生还是非学生。「是不是人」、「是什么样的人」类似这样的信息就可以理解为 headers,headers 就是一种访问者提供给网站的身份标识。
那么警察局和电影院,对于访客的身份信息要求肯定是不一样的,警察局还会需要你提供身份证信息,而电影院只需要你提供学生证就可以。所以 headers 的格式是由网站开发者来进行规定的。
cookies
cookies简单理解就是一种「登录状态的凭证」。举个栗子,当你在电影院购登记成为会员,并给了你一张会员卡,这意味着你将比起普通观众多了更多权限,比如可以享受 VIP 等候区、可以以更低的价格购票等,但是电影院怎么区分什么是普通用户什么是会员用户呢?区别在于会员访问时会提供会员卡,你出示会员卡后,影院就知道改给你提供什么样的信息或者服务了。
这里的会员卡就可以理解为 cookies,影院可以理解为网站,而「登记成为会员」这个过程可以理解为注册登记为会员。
如果还不是很理解,有这样一个问题或许可以帮助你理解:
为什么第一次登录微博需要输入密码,而第二次登录却不需要呢?
原因就是,第一次访问时,用户给网站提供了账号密码,网站则会给用户返回一个 cookies数据。cookies 会被浏览器保存在你的电脑上。这样子第二次访问时,浏览器会带上之前得到的 cookies,网站看到 cookies,就知道你是登录状态的用户,所以第二次就不需要再输入密码了。
这就是为什么360清理电脑时 一般不会清理掉 cookies 信息。如果清理掉,那么你登录各种网站就需要重新输入密码了。
post/get
根据字面意思:post是提交的意思,get是取得的意思。
在实际网络情景下,post 就是填写表单并点击提交的一个过程,get 就是你点击一个连接并获得新页面内容的过程。
post 和get 是在网络世界中基本的两种信息交互方式 发信息与收信息。
根据字面意思理解,你可能会好奇,get 可以「得到」数据,那么 post 是不是不能「得到」数据呢?
对于 post 比较特殊的是,post 把信息提交给网站后,同时会获取网站根据你的 post 返回的数据。网站会在得到用户的 post 请求后,会返回一个新页面给用户,比如当你在登录框中填写好账号密码后,提交后,如果密码正确,网站给你反馈了一个成功登录的用户首页,而不是什么都不做。
同样的,get 其实也并不是单纯地「得到」,get 方式去访问网站时,一般需要提供 headers 来使得网站信任你。
所以,post 和 get 本质上都是给网站信息,并获得信息的一个种方式。只不过在 post 方法中网站除了要知道你的 headers ,还会额外需要根据你提供的表单信息来判断给你提供什么数据。而 get 网站只需要知道你的 headers 信息,就可以给你返回相关数据。
如何知道网站的这些动作呢?
一般浏览器都会自带一个网络监测工具,我用的是 chrome浏览器,下面介绍下如何查看。
在 chrome 的右键功能列表中有一项「检查」
检查功能可以帮助我们去分析网络请求相关的内容
好,我们可以选择一个 get 请求去查看。
发现一个 get 请求内涵非常丰富。
不过没关系,尽管headers 里头看起来一堆非常复杂的东西,不过我们并不需要知道每个数据的含义是什么,这些都是网站规定的格式,后期我们再慢慢了解~