nodejs實現(xiàn)的http、https 請求封裝操作示例
更新時間:2020年02月06日 12:05:11 作者:李瓊濤
這篇文章主要介紹了nodejs實現(xiàn)的http、https 請求封裝操作,結(jié)合實例形式分析了node.js針對http、https 請求的封裝與使用相關(guān)操作技巧,需要的朋友可以參考下
本文實例講述了nodejs實現(xiàn)的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);
})();
執(zhí)行命令
nodemon test.js
希望本文所述對大家node.js程序設(shè)計有所幫助。
相關(guān)文章
typescript nodejs 依賴注入實現(xiàn)方法代碼詳解
今天分享的是用typescript語言實現(xiàn)的ioc模式,這邊用到的主要組件是 reflect-metadata 這個組件可以獲取或者設(shè)置元數(shù)據(jù)信息,接下來通過本文給大家介紹typescript nodejs 依賴注入實現(xiàn)方法,需要的朋友可以參考下2019-07-07
node實現(xiàn)shell命令管理工具及commander.js學(xué)習(xí)
這篇文章主要為大家介紹了node實現(xiàn)shell命令管理工具及commander.js學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
NodeJs從頭到尾構(gòu)建一個Typescript項目的全過程
前端開發(fā)中的各種腳手架對TypeScript支持已經(jīng)很完善了,這篇文章主要介紹了NodeJs從頭到尾構(gòu)建一個Typescript項目的全過程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04

