当前位置: 移动技术网 > IT编程>脚本编程>NodeJs > nodejs实现的http、https 请求封装操作示例

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

2020年05月10日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网