最近在给公司的网页把传统的输入字符数字的验证码改google reCAPTCHA验证,就写写我学到的和一些我的理解!说得不好请勿怪!有兴趣可以的去
https://developers.google.com/recaptcha/docs/display官网看看。

一、是recaptcha密钥的申请https://developers.google.com/recaptcha。需要登录google账号哦!

申请到密钥后,就是使用了。这https://developers.google.com/recaptcha/docs/display有介绍的。不过我还是再回顾一下。

二、 div+class 的简单使用与recaptcha前端验证

<script type="text/javascript" src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
var recaptchaBox = doucument.getElementById("recaptchaBox");
//验证成功回调事件,用data-callback绑定
var verifyCallback = function (response) {
recaptchaBox.style.border = "";
document.getElementById("resStr").innerText = response; //输出一下,看看这验证通过后,返回的验证码
}
  function btnClick() {
var res = grecaptcha.getResponse();
if (!res) {
alert("请完成recaptcha验证!");
recaptchaBox.style.border = "1px solid red";
return;
}
}
</script>
<div id="recaptchaBox"><div class="g-recaptcha" data-sitekey="your_site_key" data-callback="verifyCallback"></div></div>
<span id="resStr"></span>
<button type="button" id="btn" onclick="" runat="server">button-btn</button>

google提供的grecaptcha.getResponse()方法的返回值,在验证通过时,与回调事件中response相同。验证不通过则返回值为空,该方法可用于在前台判断recaptcha验证是否通过。

二、onload事件与主题(风格)

<script type="text/javascript">
  var onloadCallback = function () {
    grecaptcha.render('recaptchaId', {
      'sitekey': '网站密钥',
      'callback': '验证通过,回调事件',
      'theme': '目前主题是dark或light,默认为light'
    });
  };
</script>
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script> <div id="recaptchaBox2"><div id="recaptchaId"></div></div>

onload事件是提供id来加载recaptcha小窗口的,https://www.google.com/recaptcha/api.js 加载完成开始执行onload事件,onload是异步执行的。

在div+clas+'data-size'里,是加载完成api.js,异步查找到div+clas+'data-size',然后调用相关事件。

三、api.js的可选参数render=onload/explicit

根据google reCAPTCHA官网对render参数的介绍,翻译后:“可选的。 是否显式呈现窗口小部件。 默认为onload,这将在它找到的第一个g-recaptcha标记中呈现小部件。”

从这里可以看出,render至少在表面上时可选的,实际上却是不是如此的,看“默认为onload”就知道了,你在引用https://www.google.com/recaptcha/api.js时没有写,不代表render它就没用到,因为它的值默认为onload。就像recaptcha的主题一样,它只是在你看不到的地方调用了。

另外也要注意一下,explicit为显式呈现窗口小部件,那么onload就是非显式呈现喽。去看看英文翻译:onload负载,explicit明确的

一起来看看下面的几个区别:注意参数render的值和是否使用onload事件

<h3>The First One</h3>
<script src="https://www.google.com/recaptcha/api.js" async="async"></script>
<div class="g-recaptcha" data-sitekey="your_sitekey"></div>
<h3>The First Two</h3>
<script src="https://www.google.com/recaptcha/api.js?render=onload" async="async"></script>
<div class="g-recaptcha" data-sitekey="your_sitekey"></div>
<h3>The First Three</h3>
<script src="https://www.google.com/recaptcha/api.js?render=explicit" async="async"></script>
<div class="g-recaptcha" data-sitekey="your_sitekey"></div>

The First One 和 The First Two 没什么区别,都能正常呈现,而The First Three。

在这里我还要提醒下哦,不能几个render参数值不同的在同一个页面一起运行,不然不能看出来是否呈现哦!
因为这样得到的结果是都正常呈现,只是呈现的有着时间上的差异。下面也一样的啦!下面的onload事件,我就省略啦。

<h3>The Second One</h3>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async="async"></script>
<div id="grecaptcha1"></div>
<h3>The Second Two</h3>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=onload" async="async"></script>
<div id="grecaptcha2"></div>
<h3>The Second Three</h3>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async="async"></script>
<div id="grecaptcha3"></div>

这一次的只有The Second Three能正常呈现,说明了有onload事件时,需满足render=explicit;而没有onload事件时,满足render=onload。

在grecaptcha.render("",{})方法中,'site-key'被配置成了,必要参数呢!
具体的是为啥,我这菜鸟不知道,我没有特别去破解过那些封包,要是哪位大神知道,麻烦给我留个言,菜鸟我在这先谢过啦。

四、直接后台验证

<script type="text/javascript">
var onloadCallback = function () {
  grecaptcha.render('recaptcha', {
  'sitekey': 'your_site_key',
      'callback': function () { document.getElementById("recaptchaBox").style.border = ""; }
    });
  };
  function proxyButton() {
    var res = grecaptcha.getResponse();
    if (!res) {
      alert("请完成ReCaptcha验证!");
      document.getElementById("recaptchaBox").style.border = "1px solid red";
      return;
    }
    $("#hidd_response").val(res);
     __doPostBack('button', '');
  }
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
<div id="grecaptchaBox" style="width: 302px; height: 76px; padding: 1px;">
  <div id="grecaptcha" style="width: 304px; height: 78px;"></div>
</div>
<input type="button" id="button" value="button" runat="server" onclick="return proxyButton();" onserverclick="btnClickServer" />
<asp:HiddenField ID="hidd_response" runat="server" Value="" />
 #region 获取返回的字符串

    [WebMethod]
protected string VerifyCaptcha(string response)
{
string res = string.Empty;
string secret = "6LcoyGoUAAAAANIlt2aFc7khDwUfBG-cabvUBihS"; Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("secret", secret);
parameters.Add("response", response); string url = "https://www.google.com/recaptcha/api/siteverify?secret=" + secret + "&response=" + response;
return (new WebClient()).DownloadString(url);
}
#endregion #region 转换为json
protected bool verifyPast()
{
string resStr = VerifyCaptcha(this.hidd_response.Value); Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(resStr);
if (jObject["success"].ToString().ToLower() == "true")
return true;
else
return false;
}
#endregion

在这里,我并没有将 “var res = grecaptcha.getResponse()”作为json/jsonp类型数据传值给后台,而是直接使用一个隐藏控件来存储它的值,在后台,就可以直接获取到这个值。

还有一点要注意,获取到的每一个“var res = grecaptcha.getResponse()”能且只能返回一次“success:true”,后面再用这个res去获取验证码返回的都是“success:false”

嗯,这里来点番外,据说这个https://www.google.com/recaptcha/api/siteverify验证使用什么T3技术啥的,所以这个.NET Framework2.0版本是不能访问该网站的;3.0的我不知道,没试过,4.0的是可以滴。

要是想看 “var res = grecaptcha.getResponse()”作为json/jsonp类型数据传值给后台,可以去看看这2个:http://www.pdwzjs.com/news/731.htmlhttps://katyusha.net/archives/391.html

(⊙o⊙)…,差点忘了一个,语言设置,只要在引入api.js是在后面加上‘hl=xx’就行了,别忘了将 xx 替换掉哦,语言库:https://developers.google.com/recaptcha/docs/language 。

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en" async defer></script>

google recaptcha-v2的更多相关文章

  1. ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

    关心最多的问题,不FQ能不能用,答案是能.Google官方提供额外的域名来提供服务,国内可以正常使用. 一. 前言 验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码.刷票.论坛灌水.刷注册等 ...

  2. Google reCAPTCHA 2 : Protect your site from spam and abuse & Google reCAPTCHA 2官方教程

    1

  3. (6)Xamarin.android google map v2

    原文 Xamarin.android google map v2 Google Map v1已经在2013年的3月开始停止支持了,目前若要在你的Android手机上使用到Google Map,就必须要 ...

  4. Android Google Map v2具体解释:开发环境配置

    Android Google Map v2具体解释:开发环境配置                                       --转载请注明出处:coder-pig 说在前面: 说到地 ...

  5. [Xamarin.Android] 如何使用Google Map V2 (转帖)

    Google Map v1已經在2013年的3月開始停止支援了,目前若要在你的Android手機上使用到Google Map,就必須要使用 到Google Map v2的版本.在Xamarin要使用G ...

  6. Google recaptcha在webform中的使用

    开源项目 https://github.com/tanveery/recaptcha-net   这个的NuGet下载量最高 https://github.com/PaulMiami/reCAPTCH ...

  7. Google reCAPTCHA 人机身份验证

    1. 适合范围 注册及登录某些使用Google验证码的网站,如https://zaif.jp/,会要求进行人机身份验证 2. 方法介绍 下载老D的Google hosts以及一键更新批处理程序 老D博 ...

  8. 在国内使用Google验证码reCaptcha

    如今各大网站都不可缺少的一部分就是验证码,验证码具有防止恶意批量操作,保护账户安全等作用.但是现在各种暴力破解验证码的手段层出不穷,验证码的保护也就失去了意义.所以各大平台为了应对这种情况也是使用类似 ...

  9. ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码

    写在前面 友情提示: Google reCAPTCHA(v3下同) 的使用不需要"梯子",但申请账号的时候需要! Google reCAPTCHA 的使用不需要"梯子&q ...

  10. 人机验证reCAPTCHA v3使用完备说明

    v2简介 相信大家都碰到过下面的展示的 人机验证界面: reCaptcha 是 Google 公司的验证码服务,方便快捷,改变了传统验证码需要输入n位失真字符的特点. reCaptcha 在使用的时候 ...

随机推荐

  1. .net core && python

    最近.net core的发展,确实值得激动,强力推荐传教文章<.NET:持续进化的统一开发平台>http://www.cnblogs.com/wer-ltm/p/8776846.html ...

  2. ubuntu 服务器 php 环境简单搭建

    安装中文支持,避免一些语言相关的坑 12345678 sudo apt-get install language-pack-zh-hans sudo vim /etc/default/locale L ...

  3. java实现树的一般操作

    https://www.cnblogs.com/dawnyxl/p/9047437.html 树是数据结构中最基本的结构,今天的博客更新一下树的基本操作: 树的节点结构: package tree; ...

  4. [洛谷P4549] [模板] 裴蜀定理

    18.10.03模拟赛T1. 出题人xcj(Mr.Handsome)十分良心,给了一道送分题...... 互测题好久没有出现送分题了.xcj真棒. 题目传送门 幸亏之前看过,否则真的是送分题都拿不到. ...

  5. Docker的自动构建镜像

    Dockerfile自动构建docker镜像类似ansible剧本,大小几kb手动做镜像:大小几百M+ dockerfile 支持自定义容器的初始命令 dockerfile主要组成部分: 基础镜像信息 ...

  6. 用缓冲技术OSCache 提高JSP应用的性能和稳定性

    一.概述 在Web应用中,有些报表的生成可能需要数据库花很长时间才能计算出来:有的网站提供天气信息,它需要访问远程服务器进行SOAP调用才能得到温度信息.所有这一切都属于复杂信息的例子.在Web页面中 ...

  7. ERROR 1129 (00000) Host ‘XXXXXX’ is blocked because of many connection errors; unblock with ‘mysqlad

    1.今天早上由于公司网络带宽达到上限,导致多台web服务器连接mysql服务器超时.后来情况好转后,连接数据库服务器出现如下错误. Host '*' is blocked because of man ...

  8. Simpo

    Time: 2017-01-16 - Download Github: https://github.com/KeliCheng/Simpo一款快速发布文字和图片到社交网站的macOS菜单栏App,目 ...

  9. 【转载】Java DecimalFormat 用法

    转载只供个人学习参考,以下查看请前往原出处:http://blog.csdn.net/wangchangshuai0010/article/details/8577982 我们经常要将数字进行格式化, ...

  10. 安卓权威编程指南 挑战练习(第26章 在 Lollipop 设备上使用 JobService)

    26.11 挑战练习:在 Lollipop 设备上使用 JobService 请创建另一个 PollService 实现版本.新的 PollService 应该继承 JobService 并使用 Jo ...