检测网页是否具有javascript重定向

问题描述 投票:7回答:4

我正在使用cURL访问许多不同的页面。我想要一种优雅的方式来检查页面是否具有javascript重定向。我可以检查正文中是否存在window.location,但是由于它可能位于.js文件中或使用了jQuery之类的库,因此似乎任何解决方案都不完美。有人有什么想法吗?

php javascript curl
4个回答
2
投票

感谢Ikstar指出了phantomjs,我得出了以下示例:

test.js

var page = require('webpage').create();
var testUrls = [
    "http://www.google.nl",
    "http://www.example.com"
];

function testNextUrl()
{
    var testUrl = testUrls.shift();
    page.open(testUrl, function() {
        var hasRedirect = page.url.indexOf(testUrl) !== 0;
        console.log(testUrl + ": " + hasRedirect.toString());
        if (testUrls.length) {
            testNextUrl();
        } else {
            phantom.exit();
        }
    });
}

testNextUrl();

结果:

D:\Tools\phantomjs-1.7.0-windows>phantomjs test.js
http://www.google.nl: false
http://www.example.com: true

0
投票

您不能仅通过解析脚本来做到这一点。只有执行才会向您显示页面JS的真实流程。

模仿执行的一种方法是使用具有重定向的不同级别的代码。最上面的是<script>标记,此处的任何重定向都是直接重定向。如果在函数内找到任何重定向,则必须跟踪程序的结构并进行猜测。


0
投票

取决于使用Curl的目的,实际上需要页面上的重定向。可以合并无头框架(例如PhantomJS(http://phantomjs.org/))以进行必要的浏览。您将能够查看是否会发生重定向以及跟踪页面上正在执行的任何其他JavaScript。


0
投票

仅通过分析网页源代码就可以检测到重定向的存在。[]不确定Halting problem可以用JavaScript编码。该算法可能会暂停,从而导致重定向的产生,或者永远运行。由于我们不知道代码是否会暂停,因此也无法决定是否执行重定向。