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学习小结(一)
Jul 06 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
详解Nodejs之npm&package.json
Jun 15 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 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上传、管理照片示例
2006/10/09 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
深入php list()函数的详解
2013/06/05 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP异常处理浅析
2015/05/12 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
javascript getElementsByClassName函数
2010/04/01 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
python实现对一个完整url进行分割的方法
2015/04/29 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
python邮件发送smtplib使用详解
2020/06/16 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
python opencv进行图像拼接
2020/03/27 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
python urllib和urllib3知识点总结
2021/02/08 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
庆七一活动方案
2014/01/25 职场文书
大学秋游活动方案
2014/02/11 职场文书
店铺转让协议书
2014/12/02 职场文书
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技