nodejs实现的http、https 请求封装操作示例
本文实例讲述了nodejs实现的http、https请求封装操作。分享给大家供大家参考,具体如下:
libs/request.js
constURL=require('url');
constzlib=require('zlib');
consthttp=require('http');
consthttps=require('https');
constqs=require('querystring');
functionRequest(cookie){
this.cookies=[];
if(cookie!==undefined){
this.setCookie(cookie);
}
}
Request.prototype.getHeaders=function(host,postData){
letheaders={
'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;CPUiPhoneOS9_1likeMacOSX)AppleWebKit/601.1.46(KHTML,likeGecko)Version/9.0Mobile/13B143Safari/601.1',
};
if(this.cookies.length){
headers.Cookie=this.cookies.join(';');
}
if(postData!=''){
headers['Content-Length']=Buffer.byteLength(postData);
}
returnheaders;
}
Request.prototype.setCookie=function(cookie){
letcookies=cookie.split(';');
for(letcofcookies){
c=c.replace(/^\s/,'');
this.cookies.push(c);
}
returnthis;
}
Request.prototype.request=function(method,url,params){
letpostData=qs.stringify(params||{});
leturlObj=URL.parse(url);
letprotocol=urlObj.protocol;
letoptions={
hostname:urlObj.host,
port:urlObj.port,
path:urlObj.path,
method:method,
headers:this.getHeaders(urlObj.host,postData),
};
returnnewPromise((resolve,reject)=>{
letreq=(protocol=='http:'?http:https).request(options,(res)=>{
letchunks=[];
res.on('data',(data)=>{
chunks.push(data);
});
res.on('end',()=>{
letbuffer=Buffer.concat(chunks);
letencoding=res.headers['content-encoding'];
if(encoding=='gzip'){
zlib.gunzip(buffer,function(err,decoded){
resolve(decoded.toString());
});
}elseif(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){
returnthis.request('GET',url,null);
}
Request.prototype.post=function(url,params){
returnthis.request('POST',url,params);
}
module.exports=function(cookie){
returnnewRequest(cookie);
}
test.js
constrequest=require('./request')();
(asyncfunction(){
letres=awaitrequest.get('http://www.axita.com.cn/');
console.log(res);
})();
执行命令
nodemontest.js
希望本文所述对大家node.js程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。