リンクがリダイレクトされる場所を確認する方法

リンクがリダイレクトされる場所を確認する方法

現在ファイルを更新するスクリプトを作成しています。このファイルには複数のバージョンがあります。重要なのは静的リンクです。これらは実際のファイルにリダイレクトされ使用されます。受信したヘッダーを印刷するフラグがあることwgetがわかりました。wget場所のリストがあります。ヘッダーの最後の場所は実際のURLです。私はそれを取得する必要があります!

私の考えはwget -Sヘッダーを取得することです(ファイルのダウンロードと生成を防ぐために別のフラグが必要です)。次に、パイプを使用して行を解析し、埋め込まれた最後の行をキャプチャしますlocation。を使うとこれが可能だと思いますgrep -l -i "location:" | tail -l。それでは、簡単に解析できる一行を残す必要があります。

したがって、コマンドは次のようになります。

# The -??? flag is the one that prevents the file from downloading. (I don't know it)
Location=$(wget -S -??? $URL | grep -l -i "location:" | tail -l)

私の質問は、ファイルをダウンロードしたくない場合はどのフラグを使用する必要がありますか?wgetそれともこれを行う他の方法/コマンドはありますか?

答え1

必要なものはHEADリクエストですが、wgetそうすることはサポートされていませんcurl

ディストリビューションはcurlリポジトリにある可能性が高いです。

curl -s -I $URL -L | awk '/Location: (.*)/ {print $2}' | tail -n 1

$ URL=http://unix.stackexchange.com/questions/89282/
$ curl -s -I $URL | awk '/Location: (.*)/ {print $2}' | tail -n 1
/questions/89282/how-to-figure-out-where-a-link-gets-redirected
$ _

ここで:

  • -scurl進行状況バーが表示されないようにします。
  • -IcurlHEADリクエストを発行してください。
  • -L次のリダイレクトを作成してくださいcurl(@brianstoneに感謝します)。追跡するリダイレクトヘッダーに応じて、それを含めることも含めない場合もあります。
  • awkスクリプトは、URIのローカル部分である括弧内に一致する式を印刷します。

関連情報