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打包工具整合到鼠标右键的方法
May 11 NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
基于NodeJS的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
使用nodejs开发cli项目实例
Jun 03 NodeJs
iPhone手机上搭建nodejs服务器步骤方法
Jul 06 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
详解Nodejs之npm&package.json
Jun 15 NodeJs
nodejs body-parser 解析post数据实例
Jul 26 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
nodejs基础之多进程实例详解
Dec 27 NodeJs
详解NodeJs项目 CentOs linux服务器线上部署
Sep 16 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
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
php数组编码转换示例详解
2014/03/11 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
javascript操作数组详解
2014/12/17 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
python实现坦克大战
2020/04/24 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
管理科学大学生求职信
2013/11/13 职场文书
大学毕业感言一句话
2014/02/06 职场文书
向领导表决心的话
2014/03/11 职场文书
个人租房协议书
2014/04/09 职场文书
门面房租房协议书
2014/08/20 职场文书
英语辞职信范文
2015/02/28 职场文书
试用期自我评价范文
2015/03/10 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android