判断HTTP请求的响应流header后再决定是否继续接收流 - CNode技术社区

判断HTTP请求的响应流header后再决定是否继续接收流
发布于 12 年前 作者 hueidou 8206 次浏览 最后一次编辑是 9 年前

获取网页的内容,但是想提高效率,所以想在响应流上只获取有用的。 例如:如果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’)的时候大概第一次响应就有头信息了吧.

回到顶部

AltStyle によって変換されたページ (->オリジナル) /