收到第一个字节后停止superagent(仅获取重定向url)

时间:2017-02-10 21:40:42

标签: node.js http superagent

我使用superagent(虽然愿意使用其他节点lib)的目标是仅获取重定向的网址,而不是正文。后者是矫枉过正,如果我可以帮助我,我想阻止我的代码下载正文。

我无法使用HEAD请求,因为无法保证在服务器上启用这些请求。

相反,我的想法是将superagent响应传递给writeStream并在接收第一个数据时停止writeStream。但是,.on('data', fn)仅适用于读取流而非写入流。

相反,我试着看看superagent.get(...)本身是否是一个读取流,我可以在其上监听.on('data', fn)来杀死流,但事实并非如此。

简而言之,还有另一种方法可以提前取消请求,同时仍然获得重定向网址,但不会产生整个机构的下载开销吗?

1 个答案:

答案 0 :(得分:0)

解决:需要buffer(false)。使用该响应可以被视为适当的读取流。

            const url = "http://www.google.com";
            superagent.get(url)
            .buffer(false)
            .end(function (err, res) {
              const urlRedirect = res.redirects.length ? res.redirects.pop() : url;
              res.destroy();
              res.on("end", function () {
                //do stuff with 'urlRedirect'
              })
            })