nodejs利⽤http模块实现银⾏卡所属银⾏查询和骚扰电话
验证⽰例
http模块内部封装了http服务器和客户端,因此Node.js不需要借助Apache、IIS、Nginx、Tomcat等传统HTTP服务器,就可以构建http服务器,亦可以⽤来做⼀些爬⾍。下⾯简单介绍该模块的使⽤,其具体API,⼤家可以⾃⾏去nodejs官⽅⽂档查看。
1、http.Server服务器
使⽤ateServer([requestListener])⽅法创建⼀个http服务器,该⽅法返回⼀个新的http.Server实例,如果指定了requestListener,则会⾃动添加request事件。http.Server继承于net.Server,故默认拥有很多的属性、⽅法和事件,如下图所⽰(只给出部分):
使⽤如下所⽰:
const http = require('http');
const server = ateServer();
<('request', (req, res) => {
res.writeHead(200, {
'content-type': 'text/plain'
});
});
<('listening', () => {
console.log(`Server is lintening on ${server.address().address}:${server.address().port}`);
});
server.listen(3000);
代码中的request事件监听的参数req,res分别是http.IncomingMessage,http.ServerResponse的实例,IncomingMessage对象是由 http.Server 或 http.ClientRequest 创建,并且被⾃动添加到'request' and 'response' 事件监听函数的第⼀个参数,是⼀个可读流,主要包括⼀些状态信息,请求信息,属
性如下所⽰:
ServerResponse对象是HTTP server内部创建,并作为request事件监听函数的第⼆个参数,实现了可写流,决定返回给客户端的内容,属性如下所⽰:
/
/router.js
function router(req,res,pathname,handle){
if(typeof handle[pathname] === 'function'){
return handle[pathname](req,res);
}else{
res.writeHead(200,{'Content-Type':'text/html'});
}
}
//handle.js
const dns = require('dns');
const fs = require('fs');
const qs  = require('querystring');
function showIndex(req,res){
...
}
function lookup(req,res){
...
}
exports['/'] = showIndex;
exports['/dnslookup'] = lookup;
2、http.ClientRequest客户端
该对象通过quest()或()⽅法创建,可以作为⼀个向服务器发起请求的客户端,该对象的属性(只列出部分)如下:
参数options可以是⼀个对象或字符串,如果是字符串则会⾃动调⽤url.parse()进⾏解析,包涵以下属性(部分):protocol,协议,默认为http:
host,主机地址
hostname,主机名
family,IP版本
port,端⼝
method,请求⽅法
path ,路径
headers ,请求头
timeout ,超时时间
callback会⾃动添加给reponse事件监听,返回值为http.ClientRequest,下⾯利⽤该知识写⼀个利⽤⽀付宝接⼝查询银⾏卡号所属银⾏,不过http换成了https,接⼝⼀致,代码如下:
const https = require('https');
const banknames = require('./bankname.js');
const btypes = {
DC: '借记卡',
CC: '信⽤卡'
};
var baseUrl = 'ccdcapi.alipay/validateAndCacheCardInfo.json?_input_charset=utf-8&cardBinCheck=true&cardNo=';
var cardNo = process.argv.slice(2)[0];
if (!/^\d{16,}$/.test(cardNo)) {
console.log(`参数错误,请输⼊16位以上银⾏卡号。例如:node http-get.js 622843*************`);
}
baseUrl = baseUrl + cardNo;
const client = (baseUrl, (res) => {
const status = res.statusCode;
const type = res.headers['content-type'];
let msg = '';
let data = '';
if (status !== 200) {
msg = '发送请求失败 code:' + statusCode;
} else if (!/^application\/json/.test(type)) {
msg = '返回的数据格式不正确,应返回JSON';
}
if (msg != '') {
console.log(msg);
}
res.setEncoding('utf8');
<('data', (chunk) => {
data += chunk;
});
<('end', () => {
try {
let bankObj = JSON.parse(data);
dealBankObj(bankObj);
} catch (e) {
console.ssage);
}
});
});
<('error', (err) => {
console.ssage);
});
function dealBankObj(obj) {
const bname = banknames[obj['bank']];
const btype = obj['cardType'];
const cardId = obj['key'];
console.log(`卡号:${cardNo}\r\n银⾏:${bname}\r\n类型:${btypes[btype]}`); }
bankname.js
const banknames = {
"SRCB": "深圳农村商业银⾏",
"BGB": "⼴西北部湾银⾏",
"SHRCB": "上海农村商业银⾏",
"BJBANK": "北京银⾏",
"WHCCB": "威海市商业银⾏",
"BOZK": "周⼝银⾏",
"KORLABANK": "库尔勒市商业银⾏",
"SPABANK": "平安银⾏",
"SDEB": "顺德农商银⾏",
"HURCB": "湖北省农村信⽤社",
"WRCB": "⽆锡农村商业银⾏",
"BOCY": "朝阳银⾏",
"CZBANK": "浙商银⾏",
"HDBANK": "邯郸银⾏",
"BOC": "中国银⾏",
"BOD": "东莞银⾏",
"CCB": "中国建设银⾏",
"ZYCBANK": "遵义市商业银⾏",
"SXCB": "绍兴银⾏",
"GZRCU": "贵州省农村信⽤社",
"ZJKCCB": "张家⼝市商业银⾏",
"BOJZ": "锦州银⾏",
"BOP": "平顶⼭银⾏",
"HKB": "汉⼝银⾏",
"SPDB": "上海浦东发展银⾏",
"NXRCU": "宁夏黄河农村商业银⾏",
"NYNB": "⼴东南粤银⾏",
"GRCB": "⼴州农商银⾏",
"BOSZ": "苏州银⾏",
"HZCB": "杭州银⾏",
"HSBK": "衡⽔银⾏",
"HBC": "湖北银⾏",
"JXBANK": "嘉兴银⾏",
"HRXJB": "华融湘江银⾏",
"BODD": "丹东银⾏",
"AYCB": "安阳银⾏",
"EGBANK": "恒丰银⾏",
"CDB": "国家开发银⾏",
"TCRCB": "江苏太仓农村商业银⾏",
"NJCB": "南京银⾏",
"ZZBANK": "郑州银⾏",
"DYCB": "德阳商业银⾏",农商银行下载app下载安装
"YBCCB": "宜宾市商业银⾏",
"SCRCU": "四川省农村信⽤",
"KLB": "昆仑银⾏",
"LSBANK": "莱商银⾏",
"YDRCB": "尧都农商⾏",
"CCQTGB": "重庆三峡银⾏",
"FDB": "富滇银⾏",
"JSRCU": "江苏省农村信⽤联合社",
"JNBANK": "济宁银⾏",
"CMB": "招商银⾏",
"JINCHB": "晋城银⾏JCBANK",
"FXCB": "⾩新银⾏",
"WHRCB": "武汉农村商业银⾏",
"HBYCBANK": "湖北银⾏宜昌分⾏",
"TZCB": "台州银⾏",
"TACCB": "泰安市商业银⾏",
"XCYH": "许昌银⾏",  "CEB": "中国光⼤银⾏",  "NXBANK": "宁夏银⾏",  "HSBANK": "徽商银⾏",  "JJBANK": "九江银⾏",  "NHQS": "农信银清算中⼼",  "MTBANK": "浙江民泰商业银⾏",  "LANGFB": "廊坊银⾏",  "ASCB": "鞍⼭银⾏",  "KSRB": "昆⼭农村商业银⾏",  "YXCCB": "⽟溪市商业银⾏",  "DLB": "⼤连银⾏",  "DRCBCL": "东莞农村商业银⾏",  "GCB": "⼴州银⾏",  "NBBANK": "宁波银⾏",  "BOYK": "营⼝银⾏",  "SXRCCU": "陕西信合",  "GLBANK": "桂林银⾏",  "BOQH": "青海银⾏",  "CDRCB": "成都农商银⾏",  "QDCCB": "青岛银⾏",  "HKBEA": "东亚银⾏",  "HBHSBANK": "湖北银⾏黄⽯分⾏",  "WZCB": "温州银⾏",  "TRCB": "天津农商银⾏",  "QLBANK": "齐鲁银⾏",  "GDRCC": "⼴东省农村信⽤社联合社",  "ZJTLCB": "浙江泰隆商业银⾏",  "GZB": "赣州银⾏",  "GYCB": "贵阳市商业银⾏",  "CQBANK": "重庆银⾏",  "DAQINGB": "龙江银⾏",  "CGNB": "南充市商业银⾏",  "SCCB": "三门峡银⾏",  "CSRCB": "常熟农村商业银⾏",  "SHBANK": "上海银⾏",  "JLBANK": "吉林银⾏",  "CZRCB": "常州农村信⽤联社",  "BANKWF": "潍坊银⾏",  "ZRCBANK": "张家港农村商业银⾏",  "FJHXBC": "福建海峡银⾏",  "ZJNX": "浙江省农村信⽤社联合社",  "LZYH": "兰州银⾏",
"JSB": "晋商银⾏",  "BOHAIB": "渤海银⾏",  "CZCB": "浙江稠州商业银⾏",  "YQCCB": "阳泉银⾏",  "SJ
BANK": "盛京银⾏",  "XABANK": "西安银⾏",  "BSB": "包商银⾏",  "JSBANK": "江苏银⾏",  "FSCB": "抚顺银⾏",  "HNRCU": "河南省农村信⽤",  "COMM": "交通银⾏",  "XTB": "邢台银⾏",  "CITIC": "中信银⾏",  "HXBANK": "华夏银⾏",  "HNRCC": "湖南省农村信⽤社",  "DYCCB": "东营市商业银⾏",  "ORBANK": "鄂尔多斯银⾏",  "BJRCB": "北京农村商业银⾏",  "XYBANK": "信阳银⾏",  "ZGCCB": "⾃贡市商业银⾏",  "CDCB": "成都银⾏",  "HANABANK": "韩亚银⾏",  "CMBC": "中国民⽣银⾏",  "LYBANK": "洛阳银⾏",  "GDB": "⼴东发展银⾏",  "ZBCB": "齐商银⾏",  "CBKF": "开封市商业银⾏",
"H3CB": "内蒙古银⾏",  "CIB": "兴业银⾏",  "CRCBANK": "重庆农村商业银⾏",  "SZSBK": "⽯嘴⼭银⾏",  "DZBANK": "德州银⾏",  "SRBANK": "上饶银⾏",