1. 程式人生 > 程式設計 >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,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',null);
}
Request.prototype.post = function(url,params) {
 return this.request('POST',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程式設計有所幫助。