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教程之环境安装及运行
Nov 21 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
详解Nodejs基于mongoose模块的增删改查的操作
Dec 21 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs中Express与Koa2对比分析
Feb 06 NodeJs
原生nodejs使用websocket代码分享
Apr 07 NodeJs
nodeJs爬虫的技术点总结
May 13 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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
url decode problem 解决方法
2011/12/26 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
python使用xmlrpc实例讲解
2013/12/17 Python
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
python实现屏保计时器的示例代码
2018/08/08 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
详解如何设置Python环境变量?
2019/05/13 Python
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
统计员岗位职责
2013/11/14 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
党校学习心得体会范文
2014/09/09 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
2015年中秋节主持词
2015/07/30 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL