我目前正在使用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);
})
控制台记录标题,但它不会显示标题对象中的位置。无论如何,我可以在发出请求并返回标题后找到网址的位置吗?
答案 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
,这是程序打印的内容。