nodejs语言实现验证码生成功能的示例代码


Posted in NodeJs onOctober 13, 2019

验证码已经是非常常用的反作弊、反攻击手段了,其实要实现这个功能对技术水平好的人也不难,但是并不是每个人,每种语言都天然适合搞某个功能...不过我们可以通过封装接口,来屏蔽差异化,把问题简单化,现在就用一个简单的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)
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
nodejs实用示例 缩址还原
Dec 28 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
nodejs实现遍历文件夹并统计文件大小
May 28 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
初探nodeJS
Jan 24 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 #NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 #NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 #NodeJs
nodejs实现聊天机器人功能
Sep 19 #NodeJs
图解NodeJS实现登录注册功能
Sep 16 #NodeJs
详解NodeJs项目 CentOs linux服务器线上部署
Sep 16 #NodeJs
nodejs一个简单的文件服务器的创建方法
Sep 13 #NodeJs
You might like
php批量删除超链接的实现方法
2015/10/19 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
如何真正的了解python装饰器
2020/08/14 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
行政管理人员精品工作推荐信
2013/11/04 职场文书
求职自荐书范文
2013/12/04 职场文书
竞聘演讲稿范文
2014/01/12 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
村党支部书记承诺书
2014/05/29 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
上甘岭观后感
2015/06/10 职场文书
工作会议简报
2015/07/20 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
JVM之方法返回地址详解
2022/02/28 Java/Android