7

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

4

4 回答 4

2

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

测试.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
于 2012-11-27T15:11:10.343 回答
0

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

模仿执行的一种方法是具有具有重定向的不同级别的代码级别。最上面的将在<script>标签下,这里的任何重定向都是直接重定向。如果在函数中发现任何重定向,那么您必须跟踪程序的结构并进行猜测。

于 2012-11-26T20:08:07.523 回答
0

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

于 2012-11-26T21:17:07.997 回答
0

仅仅分析网页源代码是不可能检测到重定向的。

不可判定的停机问题可以用 JavaScript 编码。该算法可能会停止,从而导致生成重定向,或者永远运行。由于我们不知道代码是否会停止,因此也不可能决定是否执行重定向。

于 2019-10-09T20:27:50.297 回答