KgCaptcha验证码实现笔记

简介: 闲来无聊,在网上发现了一个验证码产品KgCaptcha,下面是我用KgCaptcha开发验证码的记录。

背景

闲来无聊,在网上发现了一个验证码产品KgCaptcha,下面是我用KgCaptcha开发验证码的记录。


开发过程

Web接入

访问官网,注册账号后登录控制台,创建应用,系统会分配一个唯一的AppId、AppSecret。

2.PNG

引入JS

这里的appid在用户控制台获取。

<scriptsrc="captcha.js?appid=xxx"></script>


JS接入代码

<script>kg.captcha({
// 绑定元素,验证框显示区域bind: "#captchaBox",
// 验证成功事务处理success: function(e) {
console.log(e); 
    },
// 验证失败事务处理failure: function(e) {
console.log(e); 
    },
// 点击刷新按钮时触发refresh: function(e) {
console.log(e);
    }
});
</script>


Python后台验证

fromwsgiref.simple_serverimportmake_serverfromKgCaptchaSDKimportKgCaptchadefstart(environ, response):
# 填写你的 AppId,在应用管理中获取AppID="xxx"# 填写你的 AppSecret,在应用管理中获取AppSecret="xxx"request=KgCaptcha(AppID, AppSecret)
# 填写应用服务域名,在应用管理中获取request.appCdn="https://cdn.kgcaptcha.com"# 请求超时时间,秒request.connectTimeout=10# 用户id/登录名/手机号等信息,当安全策略中的防控等级为3时必须填写request.userId="kgCaptchaDemo"# 使用其它 WEB 框架时请删除 request.parse,使用框架提供的方法获取以下相关参数parseEnviron=request.parse(environ)
# 前端验证成功后颁发的 token,有效期为两分钟request.token=parseEnviron["post"].get("kgCaptchaToken", "")  # 前端 _POST["kgCaptchaToken"]# 客户端IP地址request.clientIp=parseEnviron["ip"]
# 客户端浏览器信息request.clientBrowser=parseEnviron["browser"]
# 来路域名request.domain=parseEnviron["domain"]
# 发送请求requestResult=request.sendRequest()
ifrequestResult.code==0:
# 验证通过逻辑处理html="验证通过"else:
# 验证失败逻辑处理html=f"{requestResult.msg} - {requestResult.code}"response("200 OK", [("Content-type", "text/html; charset=utf-8")])
return [bytes(str(html), encoding="utf-8")]
httpd=make_server("0.0.0.0", 8088, start)  # 设置调试端口  http://localhost:8088/httpd.serve_forever()


JS刷新验证码

<script>kg.reload(kg.param);</script>


效果展示

1.PNG

最后

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

相关文章
|
存储 JavaScript 算法
Vue中如何实现动态路由
Vue中如何实现动态路由
217 1
|
12月前
|
存储 安全 数据库
浅谈base64编码
浅谈base64编码
544 0
|
SQL 数据采集 DataWorks
DataWorks重磅推出Serverless资源组,实现低成本灵活付费和动态平滑扩缩容
DataWorks资源组2.0上线,提供低成本、动态扩缩容的数据计算资源服务。
55617 13
DataWorks重磅推出Serverless资源组,实现低成本灵活付费和动态平滑扩缩容
|
算法 编译器 程序员
C++为什么有参数依赖查找(ADL)?
为什么在限定名称查找和非限定名称查找之外,C++还要提供参数依赖查找这样的机制呢?它其实是在规范的查找框架下,提供了一种灵活性的补充
201 4
|
SQL Java 数据库连接
Mybatis的Cursor如何避免OOM异常
在 Mybatis 中,`Cursor` 是一个特殊对象,用于避免大量数据查询时导致的 OOM 错误。它通过懒加载和迭代器实现内存友好型数据处理,尤其适用于大规模数据查询。使用时只需将 Mapper 文件中的方法返回值设为 `Cursor&lt;T&gt;`。其原理在于操作原生 `Statement` 并按需获取数据,而非一次性加载所有数据,从而避免内存溢出。
526 3
|
设计模式 Java 开发者
如何在Java项目中实现领域驱动设计(DDD)
如何在Java项目中实现领域驱动设计(DDD)
|
SQL 消息中间件 Kafka
flink问题之schema 失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
405 1
|
机器学习/深度学习 传感器 算法
【LSTM回归预测】基于哈里斯鹰算法优化长短时记忆HHO-biLSTM风电数据预测(含前后对比)附Matlab代码
【LSTM回归预测】基于哈里斯鹰算法优化长短时记忆HHO-biLSTM风电数据预测(含前后对比)附Matlab代码
|
存储
fastdfs源码阅读:上传和下载(文件客户端逻辑)
fastdfs源码阅读:上传和下载(文件客户端逻辑)
452 0
|
消息中间件 Kafka
Kafka - 3.x Producer 生产者最佳实践
Kafka - 3.x Producer 生产者最佳实践
295 0