验证码已经是非常常用的反作弊、反攻击手段了,其实要实现这个功能对技术水平好的人也不难,但是并不是每个人,每种语言都天然适合搞某个功能...不过我们可以通过封装接口,来屏蔽差异化,把问题简单化,现在就用一个简单的nodejs脚本来实现验证生成功能,例子如下:

var http = require('http');
var qs = require('querystring'); //配置您申请的appKey和openId
app_key = "***";
open_id = "***"; function request_content(request_url,port,params,method){ var path=request_url;
if(!!params){
var content = qs.stringify(params);
path=request_url+'?' + content;
} var options = {
port: port,
path: path,
method: method
}; if(method.toLowerCase()=='post'){
options['headers']="Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8";
} var req = http.request(options, function (res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log(chunk);
});
}); req.on('error', function (e) {
console.log('problem with request: ' + e.message);
}); req.end();
} function main(){ var domain="http://api.xiaocongjisuan.com/";
var port=8080;//http对应80端口,https 对应443端口,请使用者自己改正
var servlet="develop/verificationcode/get";
var method="get";
var request_url=domain+servlet; var params = {};
params['appKey']=app_key;
params['openId']=open_id; //变动部分
params["w"]=200;
params["h"]=50;
params["len"]=7;
params["fontSize"]=40; request_content(request_url,port,params,method);
} main();

其他语言的实现方式比如php,java,python等可以点这里查看,这里暂且附上比较小众的GO语言的实现方式:

package main

import (
"io/ioutil"
"net/http"
"net/url"
"fmt"
"strings"
) //配置您申请的appKey和openId
const APP_KEY ="yours";
const OPEN_ID ="yours"; func requestContent(requestUrl string,params url.Values,method string)(rs[]byte ,err error){ if strings.ToUpper(method)=="GET"{
return get(requestUrl,params)
}
return post(requestUrl,params)
} // get 网络请求
func get(requestUrl string,params url.Values)(rs[]byte ,err error){
var Url *url.URL
Url,err=url.Parse(requestUrl)
if err!=nil{
fmt.Printf("解析url错误:\r\n%v",err)
return nil,err
}
//如果参数中有中文参数,这个方法会进行URLEncode
Url.RawQuery=params.Encode()
resp,err:=http.Get(Url.String())
if err!=nil{
fmt.Println("err:",err)
return nil,err
}
defer resp.Body.Close()
return ioutil.ReadAll(resp.Body)
} // post 网络请求 ,params 是url.Values类型
func post(requestUrl string, params url.Values)(rs[]byte,err error){
resp,err:=http.PostForm(requestUrl, params)
if err!=nil{
return nil ,err
}
defer resp.Body.Close()
return ioutil.ReadAll(resp.Body)
} func main(){ domain :="http://api.xiaocongjisuan.com/" servlet :="develop/verificationcode/get"
method :="get"
requestUrl:=domain+servlet //初始化参数
params:=url.Values{} params.Set("appKey",APP_KEY)
params.Set("openId",OPEN_ID) //变动部分
params.Set("w","200")
params.Set("h","50")
params.Set("len","7")
params.Set("fontSize","40") //发送请求
data,err:=requestContent(requestUrl,params,method)
fmt.Println(string(data))
if err!=nil{
fmt.Printf("解析url错误:\r\n%v",err)
}
}

最新文章

  1. 不重新编译php安装配置eAccelerator
  2. Win10 PC一周年更新正式版14393.447 32位/64位更新补丁KB3200970下载 Flash补丁Kb3202790下载
  3. android NDK debug 遇到的问题与解决方法
  4. 开始使用MarkDown写博客
  5. 远哥谈 使用WebSocket开发在线实时看远程服务器log日志的工具
  6. HTTP协议状态码
  7. HDU 4667 Building Fence
  8. Codeforces Round #332 (Div. 二) B. Spongebob and Joke
  9. 最近升级了一下小老婆(8核 2x8G DDR3 128G SSD)
  10. Java实战之01Struts2-04拦截器、上传下载、OGNL表达式
  11. 桌面小部件----LED电子时钟实现
  12. Enable-Migrations 在应用程序配置文件中找不到xx连接字符串
  13. 5. JavaScript 正则表达式
  14. 一个普通底层.NET程序员关于职场瓶颈期的思考,辗转自我提升/跳槽/转行之间
  15. Chapter 2 User Authentication, Authorization, and Security(4):限制SA帐号的管理权限
  16. 连接Redis_五种数据格式
  17. python3中的socket
  18. JavaScript我学之八善变的this---函数执行上下文
  19. install postgresql 10 on redhat linux 7 Redhat 安装 postgresql 10
  20. java的OSGi确实是个坑

热门文章

  1. web开发:javascript之dom与bom
  2. input子系统驱动
  3. jQuery超酷响应式瀑布流效果
  4. Python 字典 (4) 持续更新
  5. Win7下使用Visual Studio为WinXP编译可执行文件
  6. 【HTTP】无状态无连接的含义
  7. Codevs 2188 最长上升子序列(变式)
  8. Poj 2887 Big String(块状数组)
  9. 早停!? earlystopping for keras
  10. CaoHaha's staff (HDU 6154)(2017中国大学生程序设计竞赛 - 网络选拔赛)