1.首先直接去螺丝帽官网去把人机验证文档看一看,有几个需要注意的地方,第一点就是不能用localhost和IP形式去访问,不过LZ亲测可行,在C盘相应的配置文件中映射到localhost和127.0.0.1这一类的IP上面都是有效的,所以不要挺在线技术支持乱忽悠。第二点就是需要在线建立相应的域名,通过生成域名的key来达到人机验证的目的。第三点就是请求路径,切记注意看文档,接下来我就围绕相关注意点分析一下。
2.注册螺丝帽系统后,在线建立域名,获取相应的key(只要你的域名不变,key就会永久生效)
3.根据文档在你的html页面书写相应的代码
<script src="//captcha.luosimao.com/static/js/api.js"></script>
<div>
<label for="captcha" class="tit">人机验证:</label>
<div class="l-captcha" data-site-key="e8126c577a8904ad4a5cb6ce82307cf8" data-callback="getResponse"></div>
</div>
这个时候其实就可以访问了,记住,记得修改文件信息
最后用你映射的路径去请求即可。这个时候只是有了效果,其实并没有后台验证,这是不符合规范的。
所以需要将值传递到后台接收,通过调用第三方接口进行请求,成功则叫真正的成功。
3.1页面定义相应的隐藏框保存code码,ajax调用后台的第三方接口访问(后台能接收到值)
3.2第三方接口调用
public Boolean verify(String dataResp)
{
HttpClient httpclient = new HttpClient();
PostMethod post = new PostMethod(SpringUtil.getProperty("api.url"));
post.setRequestHeader("Accept", "application/json");
post.getParams().setParameter("http.protocol.content-charset", "utf-8");
post.addParameter("api_key", SpringUtil.getProperty("api.key"));
post.addParameter("response", dataResp);
String info = "";
try
{
httpclient.executeMethod(post);
info = new String(post.getResponseBody(), "utf-8");
log.info("人机验证返回信息:" + info);
JSONObject responseJson = JSON.parseObject(info);
String res = responseJson.getString("res");
if ("success".equals(res)) {
return Boolean.valueOf(true);
}
if ("failed".equals(res))
{
String error = responseJson.getString("error");
if ("-10".equals(error)) {
log.error("API KEY 为空");
} else if ("-11".equals(error)) {
log.error("response为空");
} else if ("-2x".equals(error)) {
log.error("response错误");
} else if ("-40".equals(error)) {
log.error("API_KEY使用错误,请确认使用了正确的KEY,注意前端和后端使用的KEY不同");
}
return Boolean.valueOf(false);
}
}
catch (IOException e)
{
e.printStackTrace();
log.error(e.getMessage());
return Boolean.valueOf(false);
}
return Boolean.valueOf(false);
}
3.3判断返回的是什么值,从而做出相应的提示。
4.第三方的东西有很多的细节,比如请求类型,是否必须加,什么东西是自动生成的,请求路径等等,所以呀,编程需要仔细,这话说的一点没错。最后送大家一句话:键盘敲烂,月薪过万,加油!