web-dev-qa-db-ja.com

wget:リダイレクトに従わない

wgetがリダイレクトを追跡しないようにするにはどうすればよいですか?

45
flybywire

--max-redirect 0

私はこれを試したことがありません。どれも許可しないか、無限に許可します。

45
Matt

curlの代わりに-Lなしでwgetを使用します。 curlを使用するときにそのオプションを省略すると、リダイレクトが追跡されなくなります。

curl -I <URL>を使用すると、リダイレクトHTMLの代わりにヘッダーが取得されます。

curl -IL <URL>を使用すると、URLのヘッダーに加えて、リダイレクト先のURLのヘッダーも取得できます。

10

wgetの一部のバージョンには--max-redirectオプション: here を参照

3
Pekka 웃

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のすべてのサブドメインにアクセスします。

3
Tim McNamara

一般に、特定の数のリダイレクトに依存することはお勧めできません。

たとえば、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"
0
Mike Nakis