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中SSL服务的性能
Jul 15 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
初探nodeJS
Jan 24 NodeJs
nodeJS实现路由功能实例代码
Jun 08 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
nodejs读取并去重excel文件
Apr 22 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 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
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
web.py在模板中输出美元符号的方法
2014/08/26 Python
pygame学习笔记(5):游戏精灵
2015/04/15 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python修改FTP服务器上的文件名
2019/09/11 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
医学院护理专业应届生求职信
2013/11/12 职场文书
20岁生日感言
2014/01/13 职场文书
好矿嫂事迹材料
2014/01/21 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
房产继承公证书
2014/04/09 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
企业承诺书格式
2014/05/21 职场文书
先进班组事迹材料
2014/12/25 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技