欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-14 15:19:57
本文实例讲述了nodejs实现的http、https 请求封装操作。分享给大家供大家参考,具体如下:libs/request.jsconst url = require('url');const zl...

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