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获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
nodejs npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
Jan 04 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
Nodejs 识别图片类型的方法
Aug 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中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
简明json介绍
2008/09/28 Javascript
中止javascript执行的方法
2014/02/14 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
js中null与空字符串""的区别讲解
2019/01/17 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
高校毕业生自我鉴定
2013/10/27 职场文书
会务接待方案
2014/02/27 职场文书
四风问题查摆材料
2014/08/25 职场文书
初中生活随笔
2015/08/15 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏