当我们在浏览网页时,有的网页需要登录或者登录后需要验证。这个时候网页就有可能弹出各种样式的验证码,如果我们想要用爬虫从这样的页面获取信息,那么这些都算验证码反爬虫。
验证码的英文是 Captcha,全称叫做 Completely Automated Public Turing test to tell Computers and Humans Apart,英文是取至全称关键词的首字母。将英文全称翻译为中文就是 自动区分人机的图灵测试。
区分人机的验证码,在哪些地方会被用到呢?
Session 是存在于服务端的,用于保存当前用户的会话信息,这个信息对于验证码的机制非常重要。
服务端是可以往 Session 对象里面存一些值的,比如我们要生成一个图形验证码,比如 1234
这四个数字的图形验证码。
首先客户端要显示某个验证码,这个验证码相关的信息肯定要从服务器端来获取。比如说请求了这个生成验证码的接口,我们要生成一个图形验证码,内容为 1234
,这时候服务端会将 1234
这四个数字保存到 Session 对象里面,然后把 1234
这个结果返回给客户端,或者直接把生成好的验证码图形返回也是可以的,客户端会将其呈现出来,用户就能看到验证码的内容了。
用户看到验证码之后呢,就会在表单里面输入验证码的内容,点击提交按钮的时候,这些信息就会又发送给服务器,服务器拿着提交的信息和 Session 里面保存的验证码信息后进行对比,如果一致,那就代表验证码输入正确,校验成功,然后就继续放行恢复正常状态。如果不一致,那就代表校验失败,会继续进行校验。
目前市面上大多数的验证码都是基于这个机制来实现的,归类如下:
说到这里有没有更了解一点呢?