使用验证码拦截爬虫和机器人实践分享

简介: 在很多时候我们都会遇到验证码的多种场景,不同的产品也会使用不同的登录验证方式。在项目开发中,我将KgCaptcha应用到搜索和分页中,下面是我写的的记录。

背景

在很多时候我们都会遇到验证码的多种场景,不同的产品也会使用不同的登录验证方式。

在项目开发中,我将KgCaptcha应用到搜索和分页中,下面是我写的的记录。

1.PNG


开发过程

1、页面创建一个搜索表单

<formname="search"method="post"id="searchForm"><inputtype="hidden"name="page"value=""/><olclass="word"><inputtype="text"name="word"value=""maxlength="30"/></ol><olclass="submit"><inputtype="submit"name=""value=""/></form>


2、接入KgCaptcha

<scriptsrc="captcha.js?appid=xxx"></script><script>kg.captcha({
// 绑定弹窗按钮button: "#captchaButton",
// 验证成功事务处理success: function (e) {
// 验证成功,直接提交表单console.log(e);
$('#kgCaptchaToken').val(e["token"])
setTimeout(() => {
$('form[name=search]').submit() 
        }, 500);
    },
// 验证失败事务处理failure: function (e) {
console.log(e);
    },
});
</script><aid="captchaButton"hidden>点击弹出验证窗口</a><inputtype="hidden"name="kgCaptchaToken"id="kgCaptchaToken"value=""/>


3、弹出验证窗口按钮

将表单提交绑定到id为captchaButton的弹出验证窗口按钮,当点击搜索,表单提交时,弹出验证窗口,待用户验证成功显示搜索结果。

5.PNG


4、分页限制

  • 首次搜索,需要弹出验证;
  • 第一页和第三页之后,需要弹出验证;
  • 其余不需要验证的页码,直接显示搜索结果;
if (page==''||page=='1'||page>'3') {
$('#captchaButton').click()
}


5、后端代码

后端根据当前页码,对提交的kgCaptchaToken进行验证,验证通过显示搜索结果;

<?phpif ($_POST['page']==''||$_POST['page']=='1'||$_POST['page'] >'3') {
include"KgCaptcha/KgCaptchaSDK.php";
// 填写你的 AppId,在应用管理中获取$appId="xxx";
// 填写你的 AppSecret,在应用管理中获取$appSecret="xxx";
$request=newkgCaptcha($appId, $appSecret);
// 填写应用服务域名,在应用管理中获取$request->appCdn="https://cdn.kgcaptcha.com";
// 前端验证成功后颁发的 token,有效期为两分钟$request->token=$_POST["kgCaptchaToken"];
// 当安全策略中的防控等级为3时必须填写$request->userId="kgCaptchaDemo";
// 请求超时时间,秒$request->connectTimeout=10;
$requestResult=$request->sendRequest();
if ($requestResult->code===0) {
// 验签成功逻辑处理// 输出搜索结果          ...
      } else {
// 验签失败逻辑处理// 失败,提示错误并跳转页面msgbox("验证失败,错误信息:{$requestResult->msg}",'search.php');
returnfalse;
      }
  } else {
// 输出搜索结果      ...
  }
?>


最后

SDK开源地址:KgCaptcha (KgCaptcha) · GitHub,顺便做了一个演示:凯格行为验证码在线体验

相关文章
|
5月前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
5月前
|
数据采集 存储 Go
Golang爬虫代理接入的技术与实践
Golang爬虫代理接入的技术与实践
|
5月前
|
数据采集 Web App开发 JavaScript
TypeScript 爬虫实践:选择最适合你的爬虫工具
TypeScript 爬虫实践:选择最适合你的爬虫工具
|
15天前
|
数据采集 消息中间件 API
Python爬虫验证码识别——手机验证码的自动化处理
Python爬虫验证码识别——手机验证码的自动化处理
21 0
|
1月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
2月前
|
数据采集 存储 JavaScript
构建你的第一个Python爬虫:从理论到实践
【8月更文挑战第27天】本文旨在为初学者提供一个关于如何构建简单Python网络爬虫的指南。我们将从网络爬虫的基础概念讲起,然后通过一个实际的项目案例来展示如何抓取网页数据,并将其存储在本地文件中。文章将介绍必要的工具和库,并逐步引导读者完成一个简单的爬虫项目,以加深对网络数据抓取过程的理解。
|
2月前
|
数据采集 Rust 安全
Rust在网络爬虫中的应用与实践:探索内存安全与并发处理的奥秘
【8月更文挑战第31天】网络爬虫是自动化程序,用于从互联网抓取数据。随着互联网的发展,构建高效、安全的爬虫成为热点。Rust语言凭借内存安全和高性能特点,在此领域展现出巨大潜力。本文探讨Rust如何通过所有权、借用及生命周期机制保障内存安全;利用`async/await`模型和`tokio`运行时处理并发请求;借助WebAssembly技术处理动态内容;并使用`reqwest`和`js-sys`库解析CSS和JavaScript,确保代码的安全性和可维护性。未来,Rust将在网络爬虫领域扮演更重要角色。
66 1
|
2月前
|
数据采集 存储 数据库
构建你的第一个Python爬虫:从入门到实践
【8月更文挑战第31天】在数字时代的浪潮中,数据如同新时代的石油,而网络爬虫则是开采这些数据的钻头。本文将引导初学者了解并实现一个基础的网络爬虫,使用Python语言,通过实际代码示例,展示如何收集和解析网页信息。我们将一起探索HTTP请求、HTML解析以及数据存储等核心概念,让你能够快速上手并运行你的首个爬虫项目。
|
2月前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
185 6
|
5月前
|
数据采集 数据挖掘 调度
异步爬虫实践攻略:利用Python Aiohttp框架实现高效数据抓取
本文介绍了如何使用Python的Aiohttp框架构建异步爬虫,以提升数据抓取效率。异步爬虫利用异步IO和协程技术,在等待响应时执行其他任务,提高效率。Aiohttp是一个高效的异步HTTP客户端/服务器框架,适合构建此类爬虫。文中还展示了如何通过代理访问HTTPS网页的示例代码,并以爬取微信公众号文章为例,说明了实际应用中的步骤。