остановить суперагент после получения первого байта (чтобы получить только URL-адрес перенаправления)

Я использую superagent (хотя и готов использовать другую библиотеку узлов) только с целью получить перенаправленный URL, но не тело. Последнее является излишним, и я хочу, чтобы мой код не загружал тело, если я могу помочь.

Я не могу использовать запросы HEAD, так как не гарантируется, что они будут включены на сервере.

Вместо этого моя идея состояла в том, чтобы направить ответ суперагента на writeStream и остановить writeStream при получении первых данных. Однако .on('data', fn) доступен только в потоке чтения, а не в потоке записи.

Вместо этого я попытался выяснить, является ли сам superagent.get(...) потоком чтения, в котором я мог бы прослушивать .on('data', fn), чтобы убить поток, но, похоже, это не так.

Короче говоря, есть ли другой способ отменить запрос досрочно, все еще получая URL-адрес перенаправления, но не неся накладные расходы на загрузку всего тела?


person Geert-Jan    schedule 10.02.2017    source источник


Ответы (1)


Решено: нужно 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'
              })
            })
person Geert-Jan    schedule 10.02.2017