1

我目前在 nodejs 中使用 request-promise 向网站发出请求,然后返回标头,因为我正在尝试获取请求的 url(位置)以防重定向。虽然我遇到的问题是,当我在请求后记录它们时,该位置没有显示在标题中。

我的代码:

const rp = require('request-promise');

const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36';
const url = //url

var _include_headers = function(body, response, resolveWithFullResponse) {
    return {'headers': response.headers, 'data': body};
  };

const options = {
    uri: url,
    followAllRedirects: true,
    method: 'get',
    gzip: true,
    transform: _include_headers,
    headers: {
        'User-Agent': userAgent
    },
};

const p1 = rp(options).then((response, error, html) => {

    console.log(response.headers);

})

控制台会记录标头,但不会显示标头对象中的位置。无论如何我可以在发出请求并返回标头后找到 url 的位置吗?

4

2 回答 2

3

你的request-promise版本是什么?你可以试试这个片段。

var rp = require('request-promise');

    rp({
        uri: 'http://google.com',
        method: 'GET',
        resolveWithFullResponse: true
    })
        .then(function (response) {
            console.dir(response.headers);
        });
于 2017-12-16T07:21:36.650 回答
3

当您设置followAllRedirects为 时true,您的响应标头中将没有location字段,访问最终重定向 URL 的唯一方法是访问response.request.uri其属性中包含最终 URL的对象href

为此,您可以修改您的transform函数以传递一个附加finalUrl属性,该属性等于response.request.uri.href

const rp = require('request-promise');

const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36';
const url = "http://www.stackoverflow.com";

const _include_headers = function(body, response, resolveWithFullResponse) {
    return {
        'headers': response.headers, 
        'data': body, 
        'finalUrl': response.request.uri.href // contains final URL
    };
};

const options = {
    uri: url,
    followAllRedirects: true,
    method: 'get',
    gzip: true,
    transform: _include_headers,
    headers: {
        'User-Agent': userAgent
    },
};

const p1 = rp(options).then((response, error, html) => {

    console.log(response.finalUrl);
});

在上面的示例中,http://www.stackoverflow.com重定向到https://stackoverflow.com,这是程序打印的内容。

于 2017-12-16T18:33:13.270 回答