在我的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">
请求似乎没有关注此元标记重定向。
这是正常的吗?我怎样才能让它遵循重定向?
答案 0 :(得分:2)
请求不像浏览器那样呈现页面,它只是一种简单的http调用方式(如果外部服务上有服务器端重定向,重定向将起作用) 。这就是为什么它无法理解这种重定向的原因。
作为一种解决方案,您可以尝试使用类似PhantomJS
(http://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 :(');
}