爬虫前端基础http协议

微信扫一扫,分享到朋友圈

爬虫前端基础http协议
收藏 00

HTTP和HTTPS

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS的请求步骤

  1. 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
  2. Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
  3. 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
  5. Web服务器利用自己的私钥解密出会话密钥。
  6. Web服务器利用会话密钥加密与客户端之间的通信。

HTTP请求头信息的重要性

罗列一些比较重要的请求头字段信息及说明。

  • User-Agent:用户代理信息,里面包含客户端使用的操作系统、系统内核、系统版本位数,以及浏览器版本和名称。
  • Cookie:身份识别等信息,例如登录后的身份信息、搜索引擎的搜索关键词实现广告的精准定位。
  • Content-Type:客户端告诉服务器,设置请求体的MIME类型(适用POST和PUT请求)
  • Referer:当前访问网址的来源网址,例如你从首页看到某篇文章,则访问该文章时,Referer就是首页的网址。
  • Accept-Encoding:这个属性是用来告诉服务器能接受什么编码格式,包括字符编码,压缩形式(一般都是压缩形式)。
  • Accept:告诉服务端,客户端接收什么类型的响应,有网页文本、音视频文件、资源文件等。
  • Accept-Language:设置接受的语言
  • Authorization:设置HTTP身份验证的凭证
  • Connection:设置当前连接和hop-by-hop协议请求字段列表的控制选项
  • Content-Length:设置请求体的字节长度
  • Host:设置服务器域名和TCP端口号,如果使用的是服务请求标准端口号,端口号可以省略
  • Origin:标识跨域资源请求(请求服务端设置Access-Control-Allow-Origin响应字段)
  • Proxy-Authorization为连接代理授权认证信息

HTTP响应状态码

200系列

  1. 200 OK:这个是最常见的,也是爬虫工程师最喜欢的,代表你本次的请求顺利拿到了响应,没有任何问题。
  2. 201 Created:201代表创建成功,通常是指浏览器或爬虫给服务器上传数据,服务器接收并验证数据没问题之后,服务器返回客户端一个201,代表成功。提交数据,通常是POST方法提交
  3. 202 Accepted:服务器拿到了数据,但是还没处理好结果,所以先发回一个202。这个状态码一般在爬虫中看不到,但是适合在异步操作的情况下返回。

300系列

  1. 301 MovedPermanently:当前资源的网址永久性迁移,并且会给你一个新的网址。值得注意的是,如果是POST请求拿到301,则下一次请求自动变成GET。
  2. 302 Move Temporarily:当前资源网址暂时性迁移到新地址,和301性质有点不一样。
  3. 304 Not Modified:这个在浏览器加载静态资源的时候,特别容易碰到,就是浏览器使用本地缓存而不消耗带宽去加载在线的静态资源,是加速网页渲染的一种资源调用机制。是前端程序员嫌弃的一个状态码。

400系列

  1. 400 BadRequest:错误请求,400系列最典型的,看到这个错误,要么是请求头参数不对,要么是请求主体的内容错误。
  2. 401 Unauthorized:401认证错误,这个还是非常好识别的,身份无法识别或者身份权限不够,检查请求头中的身份字段信息和Cookie值。
  3. 403 Forbidden:禁止访问,大并发爬虫中比较容易碰到,问题很直观,你访问太多了【换IP或电脑】,或者身份权限不够【换身份信息】。
  4. 404 Not Found:404找不到,这个错误不用太在意,用浏览器测试几次就好,要么是你的网址写错了,要么是网址对应的网络资源无法加载【这不怪程序】。
  5. 405 MethodNot Allowed:405方法不被允许,简单且少见的错误,意思就是你请求的姿势不对,检查请求方法,如Get、Post、Put、Delete,总有一个是对的。

500系列

  1. 500 Internal ServerError:网络错误,就和你断网了一样,具体点就是你的网络和网址所在网络,无法连通。
  2. 502 BadGateway:网关错误,请求出去要被网关解析目的地址并转发你的请求,这个错误就是网关不工作了,无法把你的请求发出去。这里的网关,可以理解成你的路由器或者你用的代理IP 服务器。
  3. 503 Service Unavailable:服务不可用,这个就是目标服务器的问题了,你要做的是通知网站管理员或者等。一般情况下,国家网站部分有休息时间,例如晚上关网。商业服务器的服务不可用,大多是升级或者临时卡了,可以过段时间再试。
  4. 504 Gateway Timeout:网关超时,这个504和502,都是网关的问题,但是又不一样。504是你找网关转发,你默认等待180秒【3分钟】,然后网关超时了没理你;502的问题是,你压根就找不到网关。
  5. 505 HTTPVersionNot Supported:HTTP版本不支持,这个比较少见,但是肯定有。网站内容太新或者太旧,对客户端的http版本要求不一样。你需要检查下本次请求所使用的http版本,然后改成网站指定版本,就可以解决这个问题。

爬虫解决HTTPS认证的解决问题

解决方法:

  1. 验证错误,那就不验证
  2. 更新系统的证书库
  3. 更新pip库:pyopenssl和cryptography

解决思路:

  • 优先使用不认证,简单暴力,还有效
  • 运行或部署爬虫时,记得同步 pyopenssl和 cryptography 操作系统越新,越不容易碰到SSL错误

GET和POST请求区别

  1. GET和POST是HTTP请求的两种基本方法,最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
  2. GET在浏览器回退时是无害的,而POST会再次提交请求
  3. GET请求只能进行url编码,而POST支持多种编码方式
  4. GET请求在URL中传送的参数是有长度限制的,而POST没有
  5. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

三种content-type

application/x-www-form-urlencoded

这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持

multipart/form-data

这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctype 等于这个值。

application/json

application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。

动态网页和静态网页

静态网页就是直接固定的数据,动态网页就是有交互的网页,比如数据通过ajax请求动态加载了数据。

百度百科,维基百科这种很少变动的网页就是静态网页。有些博客也是静态网页。

静态网页相对稳定,响应快,利于SEO

动态网页体验好,数据部分加载,对服务器友好,扩展性好

一个热爱互联网的咸鱼

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

热门

    抱歉,30天内未发布文章!
返回顶部