如何在 ASP Classic 中实现 Google Recaptcha 2.0?
How to implement Google Recaptcha 2.0 in ASP Classic?
我需要帮助来实现答案Google Recaptcha 2.0.
我尝试了几种方法来在发送表单后恢复响应,但 consigui 没有得到正确的答案。
遵循我正在尝试的示例:
recaptcha_secret = "example45454sasa"
sendstring = _
"https://www.google.com/recaptcha/api/siteverify?" & _
"secret=" & recaptcha_secret & _
"&response=" & request.form("g-recaptcha-response")
Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXML.Open "GET", sendstring , false
objXML.Send()
if instr(objXML.responseText,"true") then
response.write "yes"
else
response.write "no"
end if
我使用 aspJSON1.17.asp 库的第二个例子:
recaptcha_secret = "example45454sasa"
Set oJSON = New aspJSON
jsonstring = "https://www.google.com/recaptcha/api/siteverify?secret=" & recaptcha_secret & "&response=" & request.form("g-recaptcha-response") & ""
'Load JSON string
oJSON.loadJSON("" & jsonstring & "")
'Get single value
Response.Write oJSON.data("success") & ""
上面的两个例子return错误或否
如何实现检查 Recaptcha 是否被标记的方法?
感谢您的关注!
在 Zam 的例子中,出现在屏幕上的响应是:
Response: { "success": false, "error-codes": [ "invalid-input-secret" ] }
我认为它应该出现 "True" 因为我正确回答了问题。
你可以测试:位。ly/1R1cbEs
我没看到你是怎么发送请求的。
无论如何,下面是使用我的测试网站站点密钥的工作示例。当然,你应该提供自己的 "secret key" 和 "data-sitekey"
实时样本:http://1click.lv/googlecaptcha.asp
文件名:GoogleCaptcha.asp
<%@LANGUAGE=VBSCRIPT%>
<%
Option Explicit
%>
<html>
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<h4>
<%
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
Dim recaptcha_secret, sendstring, objXML
' Secret key
recaptcha_secret = "6LfUUwgTAAAAAMQy5tz9u1BMSnCQV1CVh5tuBcEF"
sendstring = "https://www.google.com/recaptcha/api/siteverify?secret=" & recaptcha_secret & "&response=" & Request.form("g-recaptcha-response")
Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXML.Open "GET", sendstring, False
objXML.Send
Response.write "<h3>Response: " & objXML.responseText & "</h3>"
Set objXML = Nothing
End If
%>
<form method="post" action="GoogleCaptcha.asp">
<!-- Site key -->
<div class="g-recaptcha" data-sitekey="6LfUUwgTAAAAAAQZPb6j22A2a2tZoAUygdmqpgdv"></div>
<br />
<input type="submit" value="Try">
</form>
</body>
</html>
在这里,它是一个但如果自 js+vb 以来的屠杀,但它正在完成工作:
<script language=JavaScript RUNAT=SERVER src="json2.min.js"></script>
<script language=JavaScript RUNAT=SERVER >
function gResult( jobj ){
if ( JSON.parse( jobj ).success == true ){ return true }else{ return false }
}
</script>
<%
dim secret, objXmlHttp, VarString
secret = "yoursekretcodehere"
VarString = "secret=" & secret &_
"&response=" & Request.Form("g-recaptcha-response") &_
"&remoteip=" & Request.ServerVariables("REMOTE_ADDR")
Set objXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
if isNull(objXmlHttp) then
Set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
end if
objXmlHttp.open "POST", "https://www.google.com/recaptcha/api/siteverify?" & VarString , False
objXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXmlHttp.send
Set objXmlHttp = Nothing
response.write gResult( objXmlHttp.responseText )
现在好了。
一些解释:首先给定的 google link 和 msxmlhttp 库会让我们返回 "invalid-site-private-key",正如在 browser 中看到的那样,我不确定为什么,但它总是用这个错误抛出我的请求。
所以我将其更改为 /siteverify,其中出现了一些 json 错误。
但是如果我们 post 在正确的值中,在 VarString 中构造(请注意 "g-recaptcha-response" 是正确的处理程序),那么它会传递一个 json 回来,结果在里面,但是当然 VB 脚本没有构建这样的功能,所以我们需要做一些 JS 巫术。
首先,获取 json2.js,只是 google,然后将其包含到您的 src(href,或本地副本),以及一个简单的 js 函数,以 return 与 G 的适当响应。
然后在最后一行我只是打印了结果,但是你可以用它做任何想做的事。
找了好久终于找到了
首先我用这个 asp class https://github.com/zhennanzhuce/js/blob/master/js/ueditor/1.4.3/asp/ASPJson.class.asp
然后验证响应我使用这个
result = (objXML.responseText)
Set oJSON = New aspJSON
oJSON.loadJSON(result)
Set objXML = Nothing
success = oJSON.data("success")
if success = "True" then
action = "go to next page"
else
action = ""
end if
现在使用的代码是:
<%@LANGUAGE=VBSCRIPT%>
<%
Option Explicit
%>
<html>
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<!-- #include file="aspJSON.asp"-->
<%
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
Dim recaptcha_secret, sendstring, objXML
' Secret key
recaptcha_secret = "XXXCCCXXXX"
sendstring = "https://www.google.com/recaptcha/api/siteverify?onload=onloadCallback&render=explicit&secret=" & recaptcha_secret & "&response=" & Request.form("g-recaptcha-response")
Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXML.Open "GET", sendstring, False
objXML.Send
dim result, oJSON, success, action, errorCapatcha, errorMsg
result = (objXML.responseText)
Set oJSON = New aspJSON
oJSON.loadJSON(result)
Set objXML = Nothing
success = oJSON.data("success")
if success = "True" then
action = "go to next page"
else
action = "do nothing"
end if
END If
%>
<form method="post" action="">
<!-- Site key -->
<div class="g-recaptcha" data-sitekey="XXXXXXXXX"></div>
<br />
<input type="submit" value="Try">
</form>
</body>
我需要帮助来实现答案Google Recaptcha 2.0.
我尝试了几种方法来在发送表单后恢复响应,但 consigui 没有得到正确的答案。
遵循我正在尝试的示例:
recaptcha_secret = "example45454sasa"
sendstring = _
"https://www.google.com/recaptcha/api/siteverify?" & _
"secret=" & recaptcha_secret & _
"&response=" & request.form("g-recaptcha-response")
Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXML.Open "GET", sendstring , false
objXML.Send()
if instr(objXML.responseText,"true") then
response.write "yes"
else
response.write "no"
end if
我使用 aspJSON1.17.asp 库的第二个例子:
recaptcha_secret = "example45454sasa"
Set oJSON = New aspJSON
jsonstring = "https://www.google.com/recaptcha/api/siteverify?secret=" & recaptcha_secret & "&response=" & request.form("g-recaptcha-response") & ""
'Load JSON string
oJSON.loadJSON("" & jsonstring & "")
'Get single value
Response.Write oJSON.data("success") & ""
上面的两个例子return错误或否
如何实现检查 Recaptcha 是否被标记的方法?
感谢您的关注!
在 Zam 的例子中,出现在屏幕上的响应是:
Response: { "success": false, "error-codes": [ "invalid-input-secret" ] }
我认为它应该出现 "True" 因为我正确回答了问题。
你可以测试:位。ly/1R1cbEs
我没看到你是怎么发送请求的。
无论如何,下面是使用我的测试网站站点密钥的工作示例。当然,你应该提供自己的 "secret key" 和 "data-sitekey"
实时样本:http://1click.lv/googlecaptcha.asp
文件名:GoogleCaptcha.asp
<%@LANGUAGE=VBSCRIPT%>
<%
Option Explicit
%>
<html>
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<h4>
<%
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
Dim recaptcha_secret, sendstring, objXML
' Secret key
recaptcha_secret = "6LfUUwgTAAAAAMQy5tz9u1BMSnCQV1CVh5tuBcEF"
sendstring = "https://www.google.com/recaptcha/api/siteverify?secret=" & recaptcha_secret & "&response=" & Request.form("g-recaptcha-response")
Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXML.Open "GET", sendstring, False
objXML.Send
Response.write "<h3>Response: " & objXML.responseText & "</h3>"
Set objXML = Nothing
End If
%>
<form method="post" action="GoogleCaptcha.asp">
<!-- Site key -->
<div class="g-recaptcha" data-sitekey="6LfUUwgTAAAAAAQZPb6j22A2a2tZoAUygdmqpgdv"></div>
<br />
<input type="submit" value="Try">
</form>
</body>
</html>
在这里,它是一个但如果自 js+vb 以来的屠杀,但它正在完成工作:
<script language=JavaScript RUNAT=SERVER src="json2.min.js"></script>
<script language=JavaScript RUNAT=SERVER >
function gResult( jobj ){
if ( JSON.parse( jobj ).success == true ){ return true }else{ return false }
}
</script>
<%
dim secret, objXmlHttp, VarString
secret = "yoursekretcodehere"
VarString = "secret=" & secret &_
"&response=" & Request.Form("g-recaptcha-response") &_
"&remoteip=" & Request.ServerVariables("REMOTE_ADDR")
Set objXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
if isNull(objXmlHttp) then
Set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
end if
objXmlHttp.open "POST", "https://www.google.com/recaptcha/api/siteverify?" & VarString , False
objXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXmlHttp.send
Set objXmlHttp = Nothing
response.write gResult( objXmlHttp.responseText )
现在好了。 一些解释:首先给定的 google link 和 msxmlhttp 库会让我们返回 "invalid-site-private-key",正如在 browser 中看到的那样,我不确定为什么,但它总是用这个错误抛出我的请求。
所以我将其更改为 /siteverify,其中出现了一些 json 错误。 但是如果我们 post 在正确的值中,在 VarString 中构造(请注意 "g-recaptcha-response" 是正确的处理程序),那么它会传递一个 json 回来,结果在里面,但是当然 VB 脚本没有构建这样的功能,所以我们需要做一些 JS 巫术。 首先,获取 json2.js,只是 google,然后将其包含到您的 src(href,或本地副本),以及一个简单的 js 函数,以 return 与 G 的适当响应。
然后在最后一行我只是打印了结果,但是你可以用它做任何想做的事。
找了好久终于找到了 首先我用这个 asp class https://github.com/zhennanzhuce/js/blob/master/js/ueditor/1.4.3/asp/ASPJson.class.asp 然后验证响应我使用这个
result = (objXML.responseText)
Set oJSON = New aspJSON
oJSON.loadJSON(result)
Set objXML = Nothing
success = oJSON.data("success")
if success = "True" then
action = "go to next page"
else
action = ""
end if
现在使用的代码是:
<%@LANGUAGE=VBSCRIPT%>
<%
Option Explicit
%>
<html>
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<!-- #include file="aspJSON.asp"-->
<%
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
Dim recaptcha_secret, sendstring, objXML
' Secret key
recaptcha_secret = "XXXCCCXXXX"
sendstring = "https://www.google.com/recaptcha/api/siteverify?onload=onloadCallback&render=explicit&secret=" & recaptcha_secret & "&response=" & Request.form("g-recaptcha-response")
Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXML.Open "GET", sendstring, False
objXML.Send
dim result, oJSON, success, action, errorCapatcha, errorMsg
result = (objXML.responseText)
Set oJSON = New aspJSON
oJSON.loadJSON(result)
Set objXML = Nothing
success = oJSON.data("success")
if success = "True" then
action = "go to next page"
else
action = "do nothing"
end if
END If
%>
<form method="post" action="">
<!-- Site key -->
<div class="g-recaptcha" data-sitekey="XXXXXXXXX"></div>
<br />
<input type="submit" value="Try">
</form>
</body>