Http协议

HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,减少网络传输。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等,网络爬虫主要就是与http协议打交道。
Https协议
HTTPS协议:是HTTP协议的加密版本,在HTTP下加入了SSL层。服务器端口号是443端口。
HTTP 请求过程:
1.当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。
2.当我们在浏览器输入URL https://www.baidu.com的时候,浏览器发送一个Request请求去获取 https://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。
在这里插入图片描述
3.浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
4.当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。
在这里插入图片描述
这就是一个用户在web上交互的基本过程。
当然如果以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,在显示屏输出,这些过程是由 HTTP 协议自己完成的。如地址错误
在这里插入图片描述
解析URL
URL是Uniform Resource Locator的简写,统一资源定位符。 一个URL由以下几部分组成:
scheme://host:port/path/?query-string=xxx#anchor
scheme:代表的是访问的协议,一般为http或者https以及ftp等。
host:主机名,域名,比如www.baidu.com
port:端口号。当你访问一个网站的时候,浏览器默认使用80端口。
path:查找路径。比如:www.jianshu.com/trending/now,后面的trending/now就是path。
query-string:查询字符串,比如:www.baidu.com/s?wd=python,后面的wd=python就是查询字符串。
anchor:锚点,后台一般不用管,前端用来做页面定位的。
在浏览器中请求一个url,浏览器会对这个url进行一个编码。除英文字母,数字和部分符号外,其他的全部使用百分号+十六进制码值进行编码。
常用的请求方法:
在Http协议中,定义了八种请求方法。这里介绍两种常用的请求方法,分别是get请求和post请求。
1.get请求:一般情况下,只从服务器获取数据下来,并不会对服务器资源产生任何影响的时候会使用get请求。
2.post请求:向服务器发送数据(登录)、上传文件等,会对服务器资源产生影响的时候会使用post请求。 以上是在网站开发中常用的两种方法。并且一般情况下都会遵循使用的原则。但是有的网站和服务器为了做反爬虫机制,也经常会不按常理出牌,有可能一个应该使用get方法的请求就一定要改成post请求,这个要视情况而定。
请求头常见参数:
HTTP 头部信息由众多的头域组成,每个头域由一个域名、冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
通过浏览器访问网页时,使用 F12 打开开发者工具,里面可以监控整个 HTTP 访问的过程。下面就以访问博客园的 HTTP 请求进行分析,首先是浏览器发出请求,请求头的数据如下:
在这里插入图片描述
GET 代表的是请求方式,HTTP/1.1 表示使用 HTTP 1.1 协议标准。
Host 头域,用于指定请求资源的 Intenet 主机和端口号,必须表示请求 URL 的原始服务器或网关的位置。HTTP/1.1 请求必须包含主机头域,否则系统会以400状态码返回。
User-Agent 头域,里面包含发出请求的用户信息,其中有使用的浏览器型号、版本和操作系统的信息。这个头域经常用来作为反爬虫的措施。
Accept 请求报头域,用于指定客户端接受哪些类型的信息。例如:Accept:image/gif,表明客户端希望接受 GIF 图象格式的资源;Accept:text/html,表明客户端希望接受 html 文本。
Accept-Language 请求报头域,类似于 Accept,但是它用于指定一种自然语言。例如:Accept-Language:zh-cn. 如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
Accept-Encoding 请求报头域,类似于 Accept,但是它用于指定可接受的内容编码。例如:Accept-Encoding:gzip.deflate。如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
Connection 报头域允许发送用于指定连接的选项。例如指定连接的状态是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。
If-Modified-Since 头域用于在发送 HTTP 请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。如果时间一致,那么返回 HTTP 状态码304(不返回文件内容),客户端收到之后,就直接把本地缓存文件显示到浏览器中。如果时间不一致,就返回 HTTP 状态码200和新的文件内容,客户端收到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。
请求发送成功后,服务器进行响应,接下来看一下响应的头信息,数据如下:
在这里插入图片描述
响应头中包含以下内容:
HTTP/1.1 表示使用 HTTP 1.1 协议标准,200OK 说明请求成功。
Date 表示消息产生的日期和时间。
Content-Type 实体报头域用于指明发送给接收者的实体正文的媒体类型。text/html;charset=utf-8 代表 HTML 文本文档,UTF-8 编码。
Transfer-Encoding:chunked 表示输出的内容长度不能确定。
Connection 报头域允许发送用于指定连接的选项。例如指定连接的状态是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。
Vary 头域指定了一些请求头域,这些请求头域用来决定当缓存中存在一个响应,并且该缓存没有过期失效时,是否被允许利用此响应去回复后续请求而不需要重复验证。
Cache-Control 用于指定缓存指令,缓存指令是单向的,且是独立的。请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
Expires 实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用 Expires 实体报头域指定页面过期的时间。
Last-Modified 实体报头域用于指示资源的最后修改日期和时间。
Content-Encoding 实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得 Content-Type 报头域中所引用的媒体类型,必须采用相应的解码机制。
从上面分析的过程中,大家基本上了解了请求和响应的头信息,最后进行一下总结:
HTTP 消息报头主要包括普通报头、请求报头、响应报头、实体报头。具体如下:
1)在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。
2)请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
3)响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对 Request-URI 所标识的资源进行下一步访问的信息。
4)请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文和请求所标识的资源的元信息。
通过下表对报文头进行分类列举说明。
常见普通报头
在这里插入图片描述
常见请求报头
在这里插入图片描述
常见响应报头
在这里插入图片描述
常见实体报头
在这里插入图片描述

常见响应状态码:
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。在浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。HTTP 状态码主要是是为了标识此次 HTTP 请求的运行状态。下面是常见的 HTTP 状态码:
200——请求成功。
301——资源(网页等)被永久转移到其他 URL。
404——请求的资源(网页等)不存在。
500——内部服务器错误。
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。HTTP 状态码共分为5种类型,如表下所示。
HTTP 状态码
在这里插入图片描述
全部的 HTTP 状态码的信息,请大家查询 HTTP 协议标准手册。
总结:本章主要讲解了 Web 前端知识和HTTP 的基本概念,在这些知识中,重点掌握HTTP请求流程、,这对接下来的 Python 爬虫开发有着非常直接的作用,有助于爬虫开发的快速入门。本章讲解的只是 Web 前端的基础知识,希望大家有时间系统地学习 Web 前端的知识,这样对之后涉及协议分析和反爬虫措施的应对方面有很大帮助。
动手实现小爬虫项目:如何使用github
将代码托管到github上,可以方便地浏览项目版本演进(记录自己完善项目的过程)、进行版本回退(如果不小心删掉了重要代码或者弄出bug了,可以退回到以前的版本),并且可用于多人协同开发(多人开发不必频繁传文件、手工合并了)。
首先可以从Git官网直接下载安装程序,然后按默认选项安装即可。
在这里插入图片描述
打开git bash,在命令行中输入
在这里插入图片描述
目的是给你正在使用的电脑起一个用户名、配置一个邮箱联系方式,用于后续向github提交时的权限认证,稍后会在你的github账户里配置某个用户名、邮箱所属的电脑可以向该github账户提交代码,毕竟任何人都有权限提交的话你的github会很乱的。
在git bash中输入
在这里插入图片描述
直接一直按回车Enter,本地的密钥对就生成了。
在这里插入图片描述
在用户目录下会生成公钥和私钥(密钥加密传输的知识如感兴趣可自行查阅学习)。之后,输入
在这里插入图片描述
将查看到的公钥复制。登录你的github账户,点击你的头像,然后 Settings -> 左栏点击 SSH and GPG keys -> 点击 New SSH key。然后你复制上面的公钥内容,粘贴进“Key”文本域内。title域,自己随便起个名字。之后,你这台电脑就可以向你的github账户上传代码了。
接下来我们来到你的github账户,点击“+”,点击New repository新建仓库,自定义一个仓库名字,然后点击create repository。
在这里插入图片描述
之后提示可以用三种方式初始化仓库,这里我们使用第一种,在本地新建一个
在这里插入图片描述
打开上节课使用pycharm创建的项目的目录,右键打开菜单,在当前目录打开git bash
在这里插入图片描述
输入“git init”,让当前目录成为一个git仓库,当前目录的所有文件目前位于工作区中;输入“git add .”,将当前目录所有文件都添加到stage暂存区中,输入“git commit -m “first commit””将暂存区中的文件修改添加到仓库中。输入“git remote add origin https://github.com/GeXeLr007/demogit.git(这里要换成你自己的github账户名和仓库名)”让本地仓库和远程仓库相关联。输入“git push -u origin master”将本地提交推送到远程仓库。(关于工作区、暂存区、仓库的关系随着git用的多了看的资料多了会慢慢理解透彻的)
在这里插入图片描述
之后,在pycharm中写代码,完成一天的工作学习后,按照“git add .”、“git commit -m “这里写上你本次提交的注释””、“git push origin master”(代表推送到远程仓库的master分支)的步骤即可将代码上传到github仓库中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值