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开发微信公众号后台服务实例
Sep 03 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
初探nodeJS
Jan 24 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
图解NodeJS实现登录注册功能
Sep 16 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 NodeJs
Nodejs实现WebSocket代码实例
May 19 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
php构造函数实例讲解
2013/11/13 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
HTML5标签小集
2011/08/02 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
办公文员的工作岗位职责
2013/11/12 职场文书
行政监察建议书
2014/05/19 职场文书
婚纱店策划方案
2014/05/22 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
南湾猴岛导游词
2015/02/09 职场文书
科级干部培训心得体会
2016/01/06 职场文书
Vue监视数据的原理详解
2022/02/24 Vue.js
你需要掌握的20个Python常用技巧
2022/02/28 Python