收到第一个字节后停止超级代理(只获得重定向 url)
stop superagent after receiving first byte (to only get redirect url)
我正在使用 superagent(尽管愿意使用其他节点库),目的是仅获取重定向的 url,而不是正文。后者太过分了,如果可以的话,我想阻止我的代码下载正文。
我无法使用 HEAD
请求,因为无法保证在服务器上启用这些请求。
相反,我的想法是将超级代理响应通过管道传递给 writeStream,并在接收到第一个数据时停止 writeStream。但是,.on('data', fn)
仅适用于读取流而不是写入流。
相反,我试图查看 superagent.get(...)
本身是否是一个读取流,我可以在其上监听 .on('data', fn)
以终止流,但情况似乎也不是这样。
简而言之,是否有另一种方法可以提前取消请求,同时仍然获得重定向 url,但不会产生整个主体的下载开销?
已解决:需要 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'
})
})
我正在使用 superagent(尽管愿意使用其他节点库),目的是仅获取重定向的 url,而不是正文。后者太过分了,如果可以的话,我想阻止我的代码下载正文。
我无法使用 HEAD
请求,因为无法保证在服务器上启用这些请求。
相反,我的想法是将超级代理响应通过管道传递给 writeStream,并在接收到第一个数据时停止 writeStream。但是,.on('data', fn)
仅适用于读取流而不是写入流。
相反,我试图查看 superagent.get(...)
本身是否是一个读取流,我可以在其上监听 .on('data', fn)
以终止流,但情况似乎也不是这样。
简而言之,是否有另一种方法可以提前取消请求,同时仍然获得重定向 url,但不会产生整个主体的下载开销?
已解决:需要 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'
})
})