nodejs實現的http、https 請求封裝操作示例
阿新 • • 發佈:2020-02-07
本文例項講述了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程式設計有所幫助。