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服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 NodeJs
nodejs基础应用
Feb 03 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 NodeJs
nodejs利用readline提示输入内容实例代码
Jul 15 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开发入门教程之面向对象
2006/12/05 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
python清除字符串里非数字字符的方法
2015/07/02 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
python 模块导入问题汇总
2021/02/01 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
this关键字的含义
2015/04/08 面试题
实习自我鉴定范文
2013/10/30 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
超市促销活动方案
2014/03/05 职场文书
影视广告专业求职信
2014/09/02 职场文书
读群众路线的心得体会
2014/09/03 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android