验证码反爬那些事

什么是验证码反爬虫?

当我们在浏览网页时,有的网页需要登录或者登录后需要验证。这个时候网页就有可能弹出各种样式的验证码,如果我们想要用爬虫从这样的页面获取信息,那么这些都算验证码反爬虫。

为什么会出现验证码?

验证码的英文是 Captcha,全称叫做 Completely Automated Public Turing test to tell Computers and Humans Apart,英文是取至全称关键词的首字母。将英文全称翻译为中文就是 自动区分人机的图灵测试。

区分人机的验证码,在哪些地方会被用到呢?

  • 网站注册的时候加上验证码,可以一定程度上防止恶意大批量注册。
  • 网站登录的时候加上验证码,可以一定程度上防止恶意密码爆破。
  • 网站在被频繁访问的时候或者浏览行为不正常的时候加上验证码,可以一定程度上防止爬虫的爬取。

常见的验证码类型

字符验证码

验证码反爬那些事_第1张图片

计算型验证码

验证码反爬那些事_第2张图片

滑动验证码

验证码反爬那些事_第3张图片

点击验证码

验证码反爬那些事_第4张图片

视觉验证码

验证码反爬那些事_第5张图片

验证码反爬虫的原理

Session 是存在于服务端的,用于保存当前用户的会话信息,这个信息对于验证码的机制非常重要。

服务端是可以往 Session 对象里面存一些值的,比如我们要生成一个图形验证码,比如 1234 这四个数字的图形验证码。

首先客户端要显示某个验证码,这个验证码相关的信息肯定要从服务器端来获取。比如说请求了这个生成验证码的接口,我们要生成一个图形验证码,内容为 1234,这时候服务端会将 1234 这四个数字保存到 Session 对象里面,然后把 1234 这个结果返回给客户端,或者直接把生成好的验证码图形返回也是可以的,客户端会将其呈现出来,用户就能看到验证码的内容了。

用户看到验证码之后呢,就会在表单里面输入验证码的内容,点击提交按钮的时候,这些信息就会又发送给服务器,服务器拿着提交的信息和 Session 里面保存的验证码信息后进行对比,如果一致,那就代表验证码输入正确,校验成功,然后就继续放行恢复正常状态。如果不一致,那就代表校验失败,会继续进行校验。

目前市面上大多数的验证码都是基于这个机制来实现的,归类如下:

  • 对于图形验证码,服务器会把图形的内容保存到 Session,然后将验证码图返回或者客户端自行显示,等用户提交表单之后校验 Session 里验证码的值和用户提交的值。
  • 对于行为验证码,服务器会做一些计算,把一些 Key、Token 等信息也储存在 Session 里面,用户首先要完成客户端的校验,如果校验成功才能提交表单,当客户端的校验完成之后,客户端会把验证之后计算产生的 Key、Token、Code 等信息发送到服务端,服务端会再做一次校验,如果服务端也校验通过了,那就算真正的通过了。
  • 对于手机验证码,服务器会预先生成一个验证码的信息,然后会把这个验证码的结果还有要发送的手机号发送给短信发送服务商,让服务商下发验证码给用户,用户再把这个码提交给服务器,服务器判断 Session 里面的验证码和提交的验证码是否一致即可。

说到这里有没有更了解一点呢?

你可能感兴趣的:(Python,经验分享)