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 相关文章推荐
nodejs npm install全局安装和本地安装的区别
Jun 05 NodeJs
nodejs导出excel的方法
Jun 30 NodeJs
nodejs入门教程一:概念与用法简介
Apr 24 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
NodeJS实现同步的方法
Mar 02 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
nodejs对项目下所有空文件夹创建gitkeep的方法
Aug 02 NodeJs
5分钟教你用nodeJS手写一个mock数据服务器的方法
Sep 10 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
图片之间的切换
2006/06/26 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
js验证密码强度解析
2020/03/18 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
python通过ssh-powershell监控windows的方法
2015/06/02 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
python监控文件并且发送告警邮件
2018/06/21 Python
python实现简单http服务器功能
2018/09/17 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
实时获取Python的print输出流方法
2019/01/07 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
详解Python IO口多路复用
2020/06/17 Python
python怎么对数字进行过滤
2020/07/05 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
主管会计岗位责任制
2014/02/10 职场文书
挂职自我鉴定
2014/02/26 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
一年级学生评语大全
2014/04/21 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
先进班集体申报材料
2014/12/26 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
2015年大学生实习评语
2015/03/25 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫