4

我尝试从用户提供的 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 的 URL 中,但这不是一个真正的解决方案(不涵盖所有用户案例)。有没有更好的 linux 网站镜像工具?

4

2 回答 2

3

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

正确的解决方案是使用另一个 Web 镜像工具。

于 2012-08-13T20:58:10.957 回答
1

您可以使用此脚本首先确定真正的目标 url,然后针对该 url 运行 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;
}
于 2018-03-14T11:58:35.137 回答