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的10个性能优化技巧
Jul 15 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
解析NodeJs的调试方法
Dec 11 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
NodeJs实现定时任务的示例代码
Dec 05 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
nodejs中实现修改用户路由功能
May 24 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
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
Python学生信息管理系统修改版
2018/03/13 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
Django的性能优化实现解析
2019/07/30 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
疾病防治方案
2014/05/31 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
在人间读书笔记
2015/06/30 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android