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

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

回到顶部