验证码已经是一种非常普遍的防作弊和防攻击手段。其实,技术好的人实现这个功能并不难,但不是所有人。每一种语言天生就适合某种功能……但是我们可以通过封装接口来屏蔽差异,简化问题。现在我们使用一个简单的nodejs脚本来实现验证生成功能。例子如下:varhttp=require('http');varqs=require('querystring');//配置你应用的appKey和openIdapp_key="***";open_id="***";functionrequest_content(request_url,port,params,method){varpath=request_url;if(!!params){varcontent=qs.stringify(params);路径=request_url+'?'+内容;}varoptions={port:端口,path:路径,method:方法};if(method.toLowerCase()=='post'){options['headers']="Content-Type':'application/x-www-form-urlencoded;charset=UTF-8";}varreq=http.request(options,function(res){res.setEncoding('utf8');res.on('data',function(chunk){console.log(chunk);});});req.on('error',function(e){console.log('请求问题:'+e.message);});req.end();}functionmain(){vardomain="http://api.xiaocongjisuan.com/";varport=8080;//http对应80端口,https对应443端口,请自行更正varservlet="develop/verificationcode/get";变种方法=“得到”;varrequest_url=域+servlet;变量参数={};参数[‘appKey’]=app_key;参数['openId']=open_id;/更改部分参数["w"]=200;参数[“h”]=50;参数[“len”]=7;参数[“字体大小”]=40;request_content(request_url、端口、参数、方法);}主要的();php、java、python等其他语言的实现可以看这里,这里是比较小众的GO语言的实现:packagemainimport("io/ioutil""net/http""net/url""fmt""strings")//配置你申请的appKey和openIdconstAPP_KEY="yours";constOPEN_ID="你的";funcrequestContent(requestUrlstring,paramsurl.Values,methodstring)(rs[]byte,errerror){ifstrings.ToUpper(method)=="GET"{returnget(requestUrl,params)}returnpost(requestUrl,params)}//获取网络请求funcget(requestUrlstring,paramsurl.Values)(rs[]byte,errerror){varUrl*url.URLUrl,err=url.Parse(requestUrl)iferr!=nil{fmt.Printf("解析url错误:\r\n%v",err)returnnil,err}//如果参数中有中文参数,该方法会URLEncodeUrl.RawQuery=params.Encode()resp,err:=http.Get(Url.String())iferr!=nil{fmt.Println("err:",err)returnnil,err}deferresp.Body.Close()returnioutil.ReadAll(resp.Body)}//post网络请求,params为url.Valuestypefuncpost(requestUrlstring,paramsurl.Values)(rs[]byte,errerror){resp,err:=http.PostForm(requestUrl,params)iferr!=nil{returnnil,err}deferresp.Body.Close()returnioutil.ReadAll(resp.Body)}funcmain(){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")//发送请求数据,err:=requestContent(requestUrl,params,method)fmt.Println(string(data))iferr!=nil{fmt.Printf("解析url错误:\r\n%v",err)}}
