nodejs实现的http、https 请求封装操作示例


Posted in NodeJs onFebruary 06, 2020

本文实例讲述了nodejs实现的http、https 请求封装操作。分享给大家供大家参考,具体如下:

libs/request.js

const URL = require('url');
const zlib = require('zlib');
const http = require('http');
const https = require('https');
const qs = require('querystring');
function Request(cookie) {
 this.cookies = [];
 if (cookie !== undefined) {
 this.setCookie(cookie);
 }
}
Request.prototype.getHeaders = function(host, postData) {
 let headers = {
 'Host': host,
 'Pragma': 'no-cache',
 'Connection': 'keep-alive',
 'Cache-Control': 'no-cache',
 'Content-Type': 'application/x-www-form-urlencoded',
 'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,es;q=0.2',
 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1',
 };
 if (this.cookies.length) {
 headers.Cookie = this.cookies.join('; ');
 }
 if (postData != '') {
 headers['Content-Length'] = Buffer.byteLength(postData);
 }
 return headers;
}
Request.prototype.setCookie = function(cookie) {
 let cookies = cookie.split(';');
 for (let c of cookies) {
 c = c.replace(/^\s/, '');
 this.cookies.push(c);
 }
 return this;
}
Request.prototype.request = function(method, url, params) {
 let postData = qs.stringify(params || {});
 let urlObj = URL.parse(url);
 let protocol = urlObj.protocol;
 let options = {
 hostname: urlObj.host,
 port: urlObj.port,
 path: urlObj.path,
 method: method,
 headers: this.getHeaders(urlObj.host, postData),
 };
 return new Promise((resolve, reject) => {
 let req = (protocol == 'http:' ? http : https).request(options, (res) => {
  let chunks = [];
  res.on('data', (data) => {
  chunks.push(data);
  });
  res.on('end', () => {
  let buffer = Buffer.concat(chunks);
  let encoding = res.headers['content-encoding'];
  if (encoding == 'gzip') {
   zlib.gunzip(buffer, function(err, decoded) {
   resolve(decoded.toString());
   });
  } else if (encoding == 'deflate') {
   zlib.inflate(buffer, function(err, decoded) {
   resolve(decoded.toString());
   });
  } else {
   resolve(buffer.toString());
  }
  });
 });
 req.on('error', (e) => {
  reject(e);
 });
 if (postData != '') {
  req.write(postData);
 }
 req.end();
 })
}
Request.prototype.get = function(url) {
 return this.request('GET', url, null);
}
Request.prototype.post = function(url, params) {
 return this.request('POST', url, params);
}
module.exports = function(cookie) {
 return new Request(cookie);
}

test.js

const request = require('./request')();
(async function() {
 let res = await request.get('http://www.axita.com.cn/');
 console.log(res);
})();

执行命令

nodemon test.js

希望本文所述对大家node.js程序设计有所帮助。

NodeJs 相关文章推荐
详谈nodejs异步编程
Dec 04 NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
3分钟快速搭建nodejs本地服务器方法运行测试html/js
Apr 01 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
nodejs log4js 使用详解
May 31 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 NodeJs
nodejs中的异步编程知识点详解
Jan 17 NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 #NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 #NodeJs
Nodejs封装类似express框架的路由实例详解
Jan 05 #NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 #NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 #NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 #NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 #NodeJs
You might like
DOM XPATH获取img src值的query
2013/09/23 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
2018/05/31 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
详解numpy的argmax的具体使用
2019/05/27 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
财务管理专业推荐信
2013/11/19 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
团日活动总结
2014/04/28 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
2014年资料员工作总结
2014/11/18 职场文书
导游词400字
2015/02/13 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
《绝招》教学反思
2016/02/20 职场文书
导游词之山东八大关
2019/12/18 职场文书