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

时间:2012-11-26 19:47:50

标签: php javascript curl

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

仅通过分析网页源代码来检测重定向的存在是不可能

不确定的Halting problem可以用JavaScript编码。该算法可能会暂停,从而导致重定向的产生,或者永远运行。由于我们不知道代码是否会暂停,因此也无法决定是否执行重定向。