"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">

请求似乎并没有遵循这个元标记重定向。

这正常吗?我该如何让它遵循重定向?

Request不像浏览器那样呈现页面,它只是进行简单http调用的一种方式(如果外部服务上有服务器端重定向,则重定向会起作用)。所以这就是为什么它不能理解这种重定向。

作为解决方案,您可以尝试使用类似PhantomJS的东西(http://phantomjs.org/)通过这里提到的一些变通方法使其工作。或者,为Selenium服务器编写的脚本可能会帮助您解决问题。

遇到同样的问题时遇到了这篇文章。我提取了刷新URL,并提出了另一个请求,以获得如下页面内容:

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 :(');
}

最新更新