当前位置: 首页 > 编程笔记 >

nodejs实现的http、https 请求封装操作示例

薛高澹
2023-03-14
本文向大家介绍nodejs实现的http、https 请求封装操作示例,包括了nodejs实现的http、https 请求封装操作示例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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程序设计有所帮助。

 类似资料:
  • 本文向大家介绍php实现的http请求封装示例,包括了php实现的http请求封装示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php的http请求封装。分享给大家供大家参考,具体如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《php socket用法总结》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Arr

  • 本文向大家介绍微信小程序HTTP接口请求封装的实现,包括了微信小程序HTTP接口请求封装的实现的使用技巧和注意事项,需要的朋友参考一下 最近在学习小程序的编写,需要调用后端接口,经常要用到wx.request方法,所以就自己封装了一下,简化一下代码,如果能给大家提供帮助更好,我的项目后端是使用的Java SSM框架,wx.request的URL就是后端提供的接口。在封装的时候我在网上看了很多篇博客

  • 本文向大家介绍JS简单实现获取元素的封装操作示例,包括了JS简单实现获取元素的封装操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS简单实现获取元素的封装操作。分享给大家供大家参考,具体如下: JS封装获取元素 js的获取元素: ID:document.getElementById(); class:document.getElementsByName()[]; Tag:docu

  • 本文向大家介绍Nodejs对postgresql基本操作的封装方法,包括了Nodejs对postgresql基本操作的封装方法的使用技巧和注意事项,需要的朋友参考一下 基于nodejs平台对postgresql的增删改查基本操作进行了封装,能满足基本的实际应用,比较复杂的SQL需另外实现。 PG.js文件如下: 用法很简单,如下: 以上这篇Nodejs对postgresql基本操作的封装方法就是小

  • 通常用于HTTP/HTTPS请求失败/成功等处理. 进程: 主进程​ IncomingMessage是由 EventEmitter响应可读流接口 实例事件 事件: 'data' 用途:响应或回调传送到应用的数据 chunk Buffer - 响应正文的数据块. 事件: 'end' 触发:响应正文已结束时 事件: 'aborted' 触发:正在进行的HTTP事务期间请求已取消时 事件: 'error

  • 本文向大家介绍Python3实现的Mysql数据库操作封装类,包括了Python3实现的Mysql数据库操作封装类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python3实现的Mysql数据库操作封装类。分享给大家供大家参考,具体如下: 这段代码需要注意几个地方: 1.数据库配置文件变量放在类外面,只在模块被载入的时候读一次,在使用数据库类时,无需再读取。这样有一个好处就是减少了IO