判断HTTP请求的响应流header后再决定是否继续接收流
获取网页的内容,但是想提高效率,所以想在响应流上只获取有用的。 例如:如果http的状态码返回404的话,如果http header的server为nginx的话,如果title为×××的话,等。 如果上述,我就不想获取整个响应流了,因为那样浪费流量和时间。
所以,有没有类似这样的js库(这里仅例http header):
function request(url, callback1, callback2) {
~由url发起request请求,获取响应流,stream
~从流中只读取http头header部分,先,
if (!callback1(header)) {
~如果这个回调返回false的话,就将流断开,结束处理
~stream.close();
return;
}
~继续获取整个http响应流,response
callback2(response);
}
以致于我可以这样:
request('http://foobar.org/a.html', function(header) {
if (header.server == 'nginx') {
return false;
} else {
return true;
}
}, function(response) {
~处理response
});
PS:这编辑器的代码自动识别很让人无语,希望可以去掉自动
4 回复
首先你的代码的逻辑应该写成回调形式的, 如果是验证header头的话,你自己验证一下 比如
//写个验证的回调
cb1 = validate(req,res,cb2) {
if OK{
cb()
}else{
return
}
}
//再写个cb2 做你想做的事情
request(url,cb1)
另外一点就是,用HEAD方法获得响应头,如果是你需要的再去GET。这样也不存在是否要继续接受流的问题了,多一步HEAD而已。
补充一下,markdown的编辑语法首页有,你可以看看。还有就是用request那个包挺好的,什么都给你封装好了。
@ggaaooppeenngg 谢谢提醒,先前以为只有回复可以用markdown。 使用HEAD方法在这里符合我的需求,但是连接成本有时相对会大。 如果有普遍的方法的话就更好了,匹配到自己的要求后就停止接收。
用自带的http模块.on(‘data’)的时候大概第一次响应就有头信息了吧.