nodejs请求 - 承诺网址未显示在标头中

时间:2017-12-16 04:45:56

标签: javascript node.js npm-request request-promise

我目前正在使用nodejs中的请求承诺向网站发出请求然后返回标头,因为我试图获取请求的网址(位置)以及重定向。虽然我遇到的问题是,当我在请求之后记录位置时,位置没有出现在标题中。

我的代码:

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);

})

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

2 个答案:

答案 0 :(得分:3)

您的request-promise版本是什么? 您可以尝试使用此代码段。

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

    rp({
        uri: 'http://google.com',
        method: 'GET',
        resolveWithFullResponse: true
    })
        .then(function (response) {
            console.dir(response.headers);
        });

答案 1 :(得分:0)

当您将followAllRedirects设置为true时,您的响应标头中不会有location字段,并且访问最终重定向网址的唯一方法是访问包含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,这是程序打印的内容。