wget:不要关注重定向

时间:2010-04-18 16:22:01

标签: linux http bash redirect wget

如何阻止 wget 跟踪重定向?

5 个答案:

答案 0 :(得分:46)

--max-redirect 0

我没试过这个,它要么不允许,要么允许无限......

答案 1 :(得分:9)

使用curl而不是-L代替wget。使用curl时省略该选项可防止重定向被跟踪。

如果您使用curl -I <URL>,那么您将获得标头而不是重定向HTML。

如果您使用curl -IL <URL>,那么您将获得该网址的标题,以及您重定向到的网址的标题。

答案 2 :(得分:3)

wget的某些版本有--max-redirect选项:请参阅here

答案 3 :(得分:3)

默认情况下,wget最多可以跟进20个重定向。但是,它不会跨越主机。如果您要求wget下载example.com,则不会触及www.example.com处的任何资源。 wget会将此检测为跨越另一个主机的请求并做出决定。

简而言之,您应该执行:

wget --mirror www.example.com

而不是

wget --mirror example.com

现在让我们说www.example.com的所有者在example.com有多个子域名,我们对所有这些子域名感兴趣。怎么办?

试试这个:

wget --mirror --domains=example.com example.com

wget现在将访问example.com的所有子域,包括m.example.comwww.example.com

答案 4 :(得分:0)

通常,依靠特定数量的重定向不是一个好主意。

例如,为了下载IntellijIdea,被保证将始终解析为Linux社区版本的最新版本的URL类似于https://download.jetbrains.com/product?code=IIC&latest&distribution=linux,但是如果您现在访问该URL,您将在到达实际的可下载文件之前,将被重定向两次(2次)。将来可能会将您重定向3次,或者根本没有重定向。

解决此问题的方法是使用HTTP HEAD动词。在IntellijIdea的情况下,这是我的解决方法:

# This is the starting URL.
URL="https://download.jetbrains.com/product?code=IIC&latest&distribution=linux"
echo "URL: $URL"

# Issue HEAD requests until the actual target is found.
# The result contains the target location, among some irrelevant stuff.
LOC=$(wget --no-verbose --method=HEAD --output-file - $URL)
echo "LOC: $LOC"

# Extract the URL from the result, stripping the irrelevant stuff.
URL=$(cut "--delimiter= " --fields=4 <<< "$LOC")
echo "URL: $URL"

# Optional: download the actual file.
wget "$URL"