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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
nodejs教程之入门
Nov 21 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
May 13 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
nodejs mysql 实现分页的方法
Jun 06 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
监控Nodejs的性能实例代码
Jul 02 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 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
PHP SQLite类
2009/05/07 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
php截取字符串函数分享
2015/02/02 PHP
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
复制粘贴功能的Python程序
2008/04/04 Python
详细介绍Python函数中的默认参数
2015/03/30 Python
Python中的filter()函数的用法
2015/04/27 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
django框架cookie和session用法实例详解
2019/12/10 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
关于VPN
2012/06/10 面试题
string = null 和string = ''的区别
2013/04/28 面试题
初中生期末考试的自我评价
2013/12/17 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
员工年终演讲稿
2014/01/03 职场文书
新娘父亲婚礼致辞
2014/01/16 职场文书
师德师风个人反思
2014/04/28 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
婚宴父亲致辞
2015/07/27 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
Python使用pyecharts控件绘制图表
2022/06/05 Python
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android