是"请求"按照元刷新标签重定向?

时间:2016-01-03 18:31:04

标签: node.js redirect request

在我的nodejs程序中,我使用require(request)。它似乎并没有遵循重定向,即使它应该是默认的。 我甚至明确设置了重定向标志(即使这应该默认设置)

var options = {
    url:url
  , followRedirect: true
  , headers: { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36'
  }
}
request(options, function (err, res, body) {...

例如,查看网站http://www.fanniemae.com/ 重定向到http://www.fanniemae.com/portal/index.html

在/index.html中,html包含此

<meta http-equiv="REFRESH" content="0;url=/portal/index.html">

请求似乎没有关注此元标记重定向。

这是正常的吗?我怎样才能让它遵循重定向?

2 个答案:

答案 0 :(得分:2)

请求不像浏览器那样呈现页面,它只是一种简单的http调用方式(如果外部服务上有服务器端重定向,重定向将起作用) 。这就是为什么它无法理解这种重定向的原因。

作为一种解决方案,您可以尝试使用类似PhantomJShttp://phantomjs.org/)之类的内容,以使其适用于here提到的一些解决方法。 或者可能为Selenium服务器编写的脚本可能会帮助您解决问题。

答案 1 :(得分:0)

遇到同样的问题时遇到过这篇文章。我提取了刷新URL并发出另一个请求以获取页面contnt:

var regex = /<meta http-equiv="Refresh" CONTENT="1; URL=([^"]+)[^>]+>/;
var match = regex.exec(response.body);

if (match[1] !== undefined) {
  request.get({
    url: host + match[1],
  }, function(error, response, body) {
    console.log(error, response, body);
  });
} else {
  console.log('no meta redirect found :(');
}