欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nodejs利用http模塊實(shí)現(xiàn)銀行卡所屬銀行查詢和騷擾電話驗(yàn)證示例

 更新時(shí)間:2016年12月30日 14:07:56   作者:SniffRose  
本篇文章主要介紹了nodejs利用http模塊實(shí)現(xiàn)銀行卡所屬銀行查詢和騷擾電話驗(yàn)證示例,有興趣的可以了解一下。

http模塊內(nèi)部封裝了http服務(wù)器和客戶端,因此Node.js不需要借助Apache、IIS、Nginx、Tomcat等傳統(tǒng)HTTP服務(wù)器,就可以構(gòu)建http服務(wù)器,亦可以用來做一些爬蟲。下面簡單介紹該模塊的使用,其具體API,大家可以自行去nodejs官方文檔查看。

1、http.Server服務(wù)器

使用http.createServer([requestListener])方法創(chuàng)建一個(gè)http服務(wù)器,該方法返回一個(gè)新的http.Server實(shí)例,如果指定了requestListener,則會(huì)自動(dòng)添加request事件。http.Server繼承于net.Server,故默認(rèn)擁有很多的屬性、方法和事件,如下圖所示(只給出部分):


使用如下所示:

const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
  res.writeHead(200, {
    'content-type': 'text/plain'
  });
  res.end('hello world');
});
server.on('listening', () => {
  console.log(`Server is lintening on ${server.address().address}:${server.address().port}`);
});
server.listen(3000);

代碼中的request事件監(jiān)聽的參數(shù)req,res分別是http.IncomingMessage,http.ServerResponse的實(shí)例,IncomingMessage對象是由 http.Server 或 http.ClientRequest 創(chuàng)建,并且被自動(dòng)添加到'request' and 'response' 事件監(jiān)聽函數(shù)的第一個(gè)參數(shù),是一個(gè)可讀流,主要包括一些狀態(tài)信息,請求信息,屬性如下所示:

ServerResponse對象是HTTP server內(nèi)部創(chuàng)建,并作為request事件監(jiān)聽函數(shù)的第二個(gè)參數(shù),實(shí)現(xiàn)了可寫流,決定返回給客戶端的內(nèi)容,屬性如下所示:

 

創(chuàng)建一個(gè)http服務(wù)器,并監(jiān)聽3000端口,用瀏覽器打開http://127.0.0.1:3000瀏覽,即可看到hello world。
 我們還可以創(chuàng)建一個(gè)簡易的路由,對用戶的請求進(jìn)行處理,如下所示:

//router.js
module.exports = router;
function router(req,res,pathname,handle){
  if(typeof handle[pathname] === 'function'){
    return handle[pathname](req,res);
  }else{
    res.writeHead(200,{'Content-Type':'text/html'});
    res.end('The request is not found!');
  }
}
//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客戶端

該對象通過http.request()或http.get()方法創(chuàng)建,可以作為一個(gè)向服務(wù)器發(fā)起請求的客戶端,該對象的屬性(只列出部分)如下:

http.request(options[, callback])方法使用

參數(shù)options可以是一個(gè)對象或字符串,如果是字符串則會(huì)自動(dòng)調(diào)用url.parse()進(jìn)行解析,包涵以下屬性(部分):

  • protocol,協(xié)議,默認(rèn)為http:
  • host,主機(jī)地址
  • hostname,主機(jī)名
  • family,IP版本
  • port,端口
  • method,請求方法
  • path ,路徑
  • headers ,請求頭
  • timeout ,超時(shí)時(shí)間

callback會(huì)自動(dòng)添加給reponse事件監(jiān)聽,返回值為http.ClientRequest,下面利用該知識(shí)寫一個(gè)利用支付寶接口查詢銀行卡號(hào)所屬銀行,不過http換成了https,接口一致,代碼如下:

const https = require('https');
const banknames = require('./bankname.js');
const btypes = {
  DC: '借記卡',
  CC: '信用卡'
};
var baseUrl = 'https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardBinCheck=true&cardNo=';
var cardNo = process.argv.slice(2)[0];

if (!/^\d{16,}$/.test(cardNo)) {
  console.log(`參數(shù)錯(cuò)誤,請輸入16位以上銀行卡號(hào)。例如:node http-get.js 6228430120000000000`);
  process.exit(0);
}
baseUrl = baseUrl + cardNo;
const client = https.get(baseUrl, (res) => {
  const status = res.statusCode;
  const type = res.headers['content-type'];
  let msg = '';
  let data = '';
  if (status !== 200) {
    msg = '發(fā)送請求失敗 code:' + statusCode;
  } else if (!/^application\/json/.test(type)) {
    msg = '返回的數(shù)據(jù)格式不正確,應(yīng)返回JSON';
  }
  if (msg != '') {
    console.log(msg);
    process.exit(0);
  }
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    data += chunk;
  });
  res.on('end', () => {
    try {
      let bankObj = JSON.parse(data);
      dealBankObj(bankObj);
    } catch (e) {
      console.log(e.message);
    }
  });
});
client.on('error', (err) => {
  console.log(err.message);
});

function dealBankObj(obj) {
  const bname = banknames[obj['bank']];
  const btype = obj['cardType'];
  const cardId = obj['key'];

  console.log(`卡號(hào):${cardNo}\r\n銀行:${bname}\r\n類型:${btypes[btype]}`);
}

bankname.js

const banknames = {
 "SRCB": "深圳農(nóng)村商業(yè)銀行", 
 "BGB": "廣西北部灣銀行", 
 "SHRCB": "上海農(nóng)村商業(yè)銀行", 
 "BJBANK": "北京銀行", 
 "WHCCB": "威海市商業(yè)銀行", 
 "BOZK": "周口銀行", 
 "KORLABANK": "庫爾勒市商業(yè)銀行", 
 "SPABANK": "平安銀行", 
 "SDEB": "順德農(nóng)商銀行", 
 "HURCB": "湖北省農(nóng)村信用社", 
 "WRCB": "無錫農(nóng)村商業(yè)銀行", 
 "BOCY": "朝陽銀行", 
 "CZBANK": "浙商銀行", 
 "HDBANK": "邯鄲銀行", 
 "BOC": "中國銀行", 
 "BOD": "東莞銀行", 
 "CCB": "中國建設(shè)銀行", 
 "ZYCBANK": "遵義市商業(yè)銀行", 
 "SXCB": "紹興銀行", 
 "GZRCU": "貴州省農(nóng)村信用社", 
 "ZJKCCB": "張家口市商業(yè)銀行", 
 "BOJZ": "錦州銀行", 
 "BOP": "平頂山銀行", 
 "HKB": "漢口銀行", 
 "SPDB": "上海浦東發(fā)展銀行", 
 "NXRCU": "寧夏黃河農(nóng)村商業(yè)銀行", 
 "NYNB": "廣東南粵銀行", 
 "GRCB": "廣州農(nóng)商銀行", 
 "BOSZ": "蘇州銀行", 
 "HZCB": "杭州銀行", 
 "HSBK": "衡水銀行", 
 "HBC": "湖北銀行", 
 "JXBANK": "嘉興銀行", 
 "HRXJB": "華融湘江銀行", 
 "BODD": "丹東銀行", 
 "AYCB": "安陽銀行", 
 "EGBANK": "恒豐銀行", 
 "CDB": "國家開發(fā)銀行", 
 "TCRCB": "江蘇太倉農(nóng)村商業(yè)銀行", 
 "NJCB": "南京銀行", 
 "ZZBANK": "鄭州銀行", 
 "DYCB": "德陽商業(yè)銀行", 
 "YBCCB": "宜賓市商業(yè)銀行", 
 "SCRCU": "四川省農(nóng)村信用", 
 "KLB": "昆侖銀行", 
 "LSBANK": "萊商銀行", 
 "YDRCB": "堯都農(nóng)商行", 
 "CCQTGB": "重慶三峽銀行", 
 "FDB": "富滇銀行", 
 "JSRCU": "江蘇省農(nóng)村信用聯(lián)合社", 
 "JNBANK": "濟(jì)寧銀行", 
 "CMB": "招商銀行", 
 "JINCHB": "晉城銀行JCBANK", 
 "FXCB": "阜新銀行", 
 "WHRCB": "武漢農(nóng)村商業(yè)銀行", 
 "HBYCBANK": "湖北銀行宜昌分行", 
 "TZCB": "臺(tái)州銀行", 
 "TACCB": "泰安市商業(yè)銀行", 
 "XCYH": "許昌銀行", 
 "CEB": "中國光大銀行", 
 "NXBANK": "寧夏銀行", 
 "HSBANK": "徽商銀行", 
 "JJBANK": "九江銀行", 
 "NHQS": "農(nóng)信銀清算中心", 
 "MTBANK": "浙江民泰商業(yè)銀行", 
 "LANGFB": "廊坊銀行", 
 "ASCB": "鞍山銀行", 
 "KSRB": "昆山農(nóng)村商業(yè)銀行", 
 "YXCCB": "玉溪市商業(yè)銀行", 
 "DLB": "大連銀行", 
 "DRCBCL": "東莞農(nóng)村商業(yè)銀行", 
 "GCB": "廣州銀行", 
 "NBBANK": "寧波銀行", 
 "BOYK": "營口銀行", 
 "SXRCCU": "陜西信合", 
 "GLBANK": "桂林銀行", 
 "BOQH": "青海銀行", 
 "CDRCB": "成都農(nóng)商銀行", 
 "QDCCB": "青島銀行", 
 "HKBEA": "東亞銀行", 
 "HBHSBANK": "湖北銀行黃石分行", 
 "WZCB": "溫州銀行", 
 "TRCB": "天津農(nóng)商銀行", 
 "QLBANK": "齊魯銀行", 
 "GDRCC": "廣東省農(nóng)村信用社聯(lián)合社", 
 "ZJTLCB": "浙江泰隆商業(yè)銀行", 
 "GZB": "贛州銀行", 
 "GYCB": "貴陽市商業(yè)銀行", 
 "CQBANK": "重慶銀行", 
 "DAQINGB": "龍江銀行", 
 "CGNB": "南充市商業(yè)銀行", 
 "SCCB": "三門峽銀行", 
 "CSRCB": "常熟農(nóng)村商業(yè)銀行", 
 "SHBANK": "上海銀行", 
 "JLBANK": "吉林銀行", 
 "CZRCB": "常州農(nóng)村信用聯(lián)社", 
 "BANKWF": "濰坊銀行", 
 "ZRCBANK": "張家港農(nóng)村商業(yè)銀行", 
 "FJHXBC": "福建海峽銀行", 
 "ZJNX": "浙江省農(nóng)村信用社聯(lián)合社", 
 "LZYH": "蘭州銀行", 
 "JSB": "晉商銀行", 
 "BOHAIB": "渤海銀行", 
 "CZCB": "浙江稠州商業(yè)銀行", 
 "YQCCB": "陽泉銀行", 
 "SJBANK": "盛京銀行", 
 "XABANK": "西安銀行", 
 "BSB": "包商銀行", 
 "JSBANK": "江蘇銀行", 
 "FSCB": "撫順銀行", 
 "HNRCU": "河南省農(nóng)村信用", 
 "COMM": "交通銀行", 
 "XTB": "邢臺(tái)銀行", 
 "CITIC": "中信銀行", 
 "HXBANK": "華夏銀行", 
 "HNRCC": "湖南省農(nóng)村信用社", 
 "DYCCB": "東營市商業(yè)銀行", 
 "ORBANK": "鄂爾多斯銀行", 
 "BJRCB": "北京農(nóng)村商業(yè)銀行", 
 "XYBANK": "信陽銀行", 
 "ZGCCB": "自貢市商業(yè)銀行", 
 "CDCB": "成都銀行", 
 "HANABANK": "韓亞銀行", 
 "CMBC": "中國民生銀行", 
 "LYBANK": "洛陽銀行", 
 "GDB": "廣東發(fā)展銀行", 
 "ZBCB": "齊商銀行", 
 "CBKF": "開封市商業(yè)銀行", 
 "H3CB": "內(nèi)蒙古銀行", 
 "CIB": "興業(yè)銀行", 
 "CRCBANK": "重慶農(nóng)村商業(yè)銀行", 
 "SZSBK": "石嘴山銀行", 
 "DZBANK": "德州銀行", 
 "SRBANK": "上饒銀行", 
 "LSCCB": "樂山市商業(yè)銀行", 
 "JXRCU": "江西省農(nóng)村信用", 
 "ICBC": "中國工商銀行", 
 "JZBANK": "晉中市商業(yè)銀行", 
 "HZCCB": "湖州市商業(yè)銀行", 
 "NHB": "南海農(nóng)村信用聯(lián)社", 
 "XXBANK": "新鄉(xiāng)銀行", 
 "JRCB": "江蘇江陰農(nóng)村商業(yè)銀行", 
 "YNRCC": "云南省農(nóng)村信用社", 
 "ABC": "中國農(nóng)業(yè)銀行", 
 "GXRCU": "廣西省農(nóng)村信用", 
 "PSBC": "中國郵政儲(chǔ)蓄銀行", 
 "BZMD": "駐馬店銀行", 
 "ARCU": "安徽省農(nóng)村信用社", 
 "GSRCU": "甘肅省農(nóng)村信用", 
 "LYCB": "遼陽市商業(yè)銀行", 
 "JLRCU": "吉林農(nóng)信", 
 "URMQCCB": "烏魯木齊市商業(yè)銀行", 
 "XLBANK": "中山小欖村鎮(zhèn)銀行", 
 "CSCB": "長沙銀行", 
 "JHBANK": "金華銀行", 
 "BHB": "河北銀行", 
 "NBYZ": "鄞州銀行", 
 "LSBC": "臨商銀行", 
 "BOCD": "承德銀行", 
 "SDRCU": "山東農(nóng)信", 
 "NCB": "南昌銀行", 
 "TCCB": "天津銀行", 
 "WJRCB": "吳江農(nóng)商銀行", 
 "CBBQS": "城市商業(yè)銀行資金清算中心", 
 "HBRCU": "河北省農(nóng)村信用社"
};
module.exports = banknames;

執(zhí)行結(jié)果如下所示:

E:\developmentdocument\nodejsdemo>node http-get.js 6228430120000000000

卡號(hào):6228430120000000000

銀行:中國農(nóng)業(yè)銀行

 類型:借記卡

下面再舉一個(gè)爬蟲例子,利用百度和360搜索的數(shù)據(jù),驗(yàn)證電話號(hào)碼是否騷擾電話,需要cheerio庫,該庫類似jquery,語法大部分一致,使用npm安裝:

npm install cheerio

我們對兩個(gè)搜索引擎搜索指定電話號(hào)碼的結(jié)果進(jìn)行分析,如果是騷擾號(hào)碼則打印出被標(biāo)記多少次,否則打印其歸屬地,實(shí)現(xiàn)如下所示:

const https = require('https');
const http = require('http');
const url = require('url');
const cheerio = require('cheerio');
const args = process.argv.slice(2);
const num = args[0];

var optionsBD = {
 host: 'www.baidu.com',
 port: 80,
 path: '/s?wd=' + num,
 method: 'GET'
};

var options360 = {
 host: 'www.so.com',
 port: 443,
 path: '/s?q=' + num,
 method: 'GET'
};

if (!/^\d+$/.test(num)) {
 console.log(`參數(shù)錯(cuò)誤,請輸入正確電話號(hào)碼或查詢平臺(tái)。\r\n例如:node phoneMark.js 15949566632`);
 process.exit(0);
}

function request(protocol, options, cb) {
 return new Promise((resolve, reject) => {
  var req = protocol.request(options, (res) => {
   var html = '';
   res.setEncoding('utf8');
   res.on('data', (chunk) => {
    html += chunk;
   });
   res.on('end', () => {
    resolve(cb(html));
   });
  });
  req.on('error', (err) => {
   reject(err);
  });
  req.end();
 });
}

Promise
 .all([request(http, optionsBD, AnalysizeByBD), request(https, options360, AnalysizeBy360)])
 .then((vals) => {
  summary(vals);
 }, (err) => {
  console.log(err);
 });

function summary(vals) {
 if ((/\d+/g).test(vals[0])) {
  console.log(`號(hào)碼${num}:為騷擾號(hào)碼,分別被百度、360標(biāo)記${vals[0]}、${vals[1]}次`);
 } else {
  console.log(`號(hào)碼${num}:${vals[0]}`);
 }
}

function AnalysizeByBD(html) {
 var $ = cheerio.load(html);
 var arr = $('.op_fraudphone_word').text().trim().replace(/\s+/g, "").match(/(\d+)/g)
 return arr ? arr[0] : $('.op_mobilephone_r').find('span').eq(1).text().replace(/\s*/g, "");
}

function AnalysizeBy360(html) {
 var $ = cheerio.load(html);
 return $('.mohe-tips').find('b').text();
}

執(zhí)行結(jié)果如下:

E:\developmentdocument\nodejsdemo>node number.js 15656069453

號(hào)碼15656069453:為騷擾號(hào)碼,分別被百度、360標(biāo)記12、8502次

http模塊便介紹到這。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Node.js 中使用 ECDSA 簽名遇到的坑

    詳解Node.js 中使用 ECDSA 簽名遇到的坑

    這篇文章主要介紹了詳解Node.js 中使用 ECDSA 簽名遇到的坑,主要是使用 Node.js 的 Crypto 模塊無法校驗(yàn)網(wǎng)絡(luò)傳輸過來的簽名結(jié)果,感興趣的小伙伴們可以參考一下
    2018-11-11
  • nodejs將JSON字符串轉(zhuǎn)化為JSON對象報(bào)錯(cuò)的解決

    nodejs將JSON字符串轉(zhuǎn)化為JSON對象報(bào)錯(cuò)的解決

    這篇文章主要介紹了nodejs將JSON字符串轉(zhuǎn)化為JSON對象報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 解決node.js安裝包失敗的幾種方法

    解決node.js安裝包失敗的幾種方法

    nodejs安裝包失敗的原因可能有很多,下面這篇文章給大家整理三種方法來解決,大家可以試一試或許可以解決你的問題,下面來一起看一看。
    2016-09-09
  • NodeJs環(huán)境中NODE_ENV介紹和設(shè)置方法

    NodeJs環(huán)境中NODE_ENV介紹和設(shè)置方法

    這篇文章主要給大家介紹了關(guān)于NodeJs環(huán)境中NODE_ENV介紹和設(shè)置的相關(guān)資料,NODE_ENV其實(shí)就是環(huán)境變量之一,用于設(shè)置nodejs當(dāng)前的運(yùn)行環(huán)境,需要的朋友可以參考下
    2024-07-07
  • WebSocket+node.js創(chuàng)建即時(shí)通信的Web聊天服務(wù)器

    WebSocket+node.js創(chuàng)建即時(shí)通信的Web聊天服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了WebSocket+node.js創(chuàng)建即時(shí)通信的Web聊天服務(wù)器的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Node.js異步I/O學(xué)習(xí)筆記

    Node.js異步I/O學(xué)習(xí)筆記

    這篇文章主要介紹了Node.js異步I/O學(xué)習(xí)筆記,本文詳細(xì)講解了異步I/O的基本概念、Node的異步I/O、非I/O的異步API、事件驅(qū)動(dòng)與高性能服務(wù)器等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • Node.js利用Net模塊實(shí)現(xiàn)多人命令行聊天室的方法

    Node.js利用Net模塊實(shí)現(xiàn)多人命令行聊天室的方法

    Node.js Net 模塊提供了一些用于底層的網(wǎng)絡(luò)通信的小工具,包含了創(chuàng)建服務(wù)器/客戶端的方法,下面這篇文章主要給大家介紹了Node.js利用Net模塊實(shí)現(xiàn)命令行多人聊天室的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • node.js到底要不要加分號(hào)淺析

    node.js到底要不要加分號(hào)淺析

    這篇文章主要給大家介紹了關(guān)于node.js到底要不要加分號(hào)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • NodeJs Express中間件使用流程解析

    NodeJs Express中間件使用流程解析

    Express中間件本質(zhì)上就是一個(gè)function處理函數(shù),多個(gè)中間件之間,共享同一份req和res,我們就可以在上游的中間件中統(tǒng)一為req或者res對象添加自定義的屬性或方法,供下游的中間件或路由進(jìn)行使用,非常方便
    2023-01-01
  • node.js通過url讀取文件

    node.js通過url讀取文件

    這篇文章主要為大家詳細(xì)介紹了node.js通過url讀取文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評論