httrack遵循重定向

时间:2012-08-11 21:26:07

标签: unix download automation httrack

我尝试从用户提供的URL开始递归镜像网页(当然有深度限制设置)。 Wget没有捕获来自css / js的链接,因此我决定使用httrack

我尝试镜像这样的网站:

# httrack <http://onet.pl> -r6 --ext-depth=6 -O ./a "+*"

本网站使用重定向(301)到http://www.onet.pl:80,httrack 下载index.html页面:

<a HREF="onet.pl/index.html" >Page has moved</a>

仅此而已!我跑的时候:

# httrack <http://www.onet.pl> -r6 --ext-depth=6 -O ./a "+*"

它做我想要的。

有没有办法让重定向后的httrack?目前我只是将“www。”+ url 添加到httrack的网址,但这不是一个真正的解决方案(并未涵盖所有用户案例)。有没有更好的Linux网站镜像工具?

2 个答案:

答案 0 :(得分:3)

在主httrack forum上,一位开发人员说这是不可能的。

正确的解决方案是使用其他网络镜像工具。

答案 1 :(得分:1)

您可以使用此脚本首先确定真正的目标网址,然后针对该网址运行httrack:

function getCorrectUrl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_URL, $url);
    $out = curl_exec($ch);

    // line endings is the wonkiest piece of this whole thing
    $out = str_replace("\r", "", $out);

    // only look at the headers
    $headers_end = strpos($out, "\n\n");

    if ($headers_end !== false) {
        $out = substr($out, 0, $headers_end);
    }

    $headers = explode("\n", $out);

    foreach ($headers as $header) {
        if (substr($header, 0, 10) == "Location: ") {
            $target = substr($header, 10);
            return $target;
        }
    }

    return $url;
}