wgetがリダイレクトを追跡しないようにするにはどうすればよいですか?
--max-redirect 0
私はこれを試したことがありません。どれも許可しないか、無限に許可します。
curl
の代わりに-L
なしでwget
を使用します。 curl
を使用するときにそのオプションを省略すると、リダイレクトが追跡されなくなります。
curl -I <URL>
を使用すると、リダイレクトHTMLの代わりにヘッダーが取得されます。
curl -IL <URL>
を使用すると、URLのヘッダーに加えて、リダイレクト先のURLのヘッダーも取得できます。
wget
の一部のバージョンには--max-redirect
オプション: here を参照
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はm.example.com
およびwww.example.com
を含むexample.comのすべてのサブドメインにアクセスします。
一般に、特定の数のリダイレクトに依存することはお勧めできません。
たとえば、IntellijIdeaをダウンロードするために、LinuxのCommunity Editionの最新バージョンに常に解決することが約束されているURLは、https://download.jetbrains.com/product?code=IIC&latest&distribution=linux
が、最近そのURLにアクセスすると、実際のダウンロード可能なファイルに到達する前に2回(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"