カールを使用してURLのリダイレクト先を取得する

カールを使用してURLのリダイレクト先を取得する

単一のURLがどこにリダイレクトされるかを確認したいと思います。たとえば、Google検索結果ページのリンク(クリックは常にGoogleサーバーを通過します)です。

私はこれを行うことができますかcurl

答え1

より簡単な方法があります

curl -w "%{url_effective}\n" -I -L -s -S $URL -o /dev/null

それは印刷されます

http://raspberrypi.stackexchange.com/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521

URL用

http://raspberrypi.stackexchange.com/a/1521/86

答え2

この試み:

$ LOCATION=`curl -I http://raspberrypi.stackexchange.com/a/1521/86 | perl -n -e '/^Location: (.*)$/ && print "$1\n"'`
$ echo "$LOCATION"
/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521#1521

Googleリダイレクト

Google リダイレクト URL は若干異なります。簡単に処理できるJavascriptリダイレクトを返しますが、gocurlで元のURLを処理するのはどうですか?

$ URL="http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFAQFjAA&url=http%3A%2F%2Fwww.raspberrypi.org%2F&ei=rv8oUODIIMvKswa4xoHQAg&usg=AFQjCNEBMoebclm0Gk0LCZIStJbF04U1cQ"
$ LOCATION=`echo "$URL" | perl -n -e '/url=([a-zA-Z0-9%\.]*)/ && print "$1\n"'`
$ echo "$LOCATION"
http%3A%2F%2Fwww.raspberrypi.org%2F
$ echo "$LOCATION" | perl -pe 's/%([0-9a-f]{2})/sprintf("%s", pack("H2",$1))/eig'
http://www.raspberrypi.org/

引用する

  1. URLデコードの場合...

答え3

カール完了したら、リダイレクトに従い、変数を印刷するように設定できます。したがって、あなたが要求したものは、次のコマンドを使用して取得できます。

curl -Ls -w %{url_effective} -o /dev/null https://google.com

マニュアルページでは、必要なパラメータを次のように説明します。

-L, --location          Follow redirects (H)
-s, --silent            Silent mode (don't output anything)
-w, --write-out FORMAT  Use output FORMAT after completion
-o, --output FILE       Write to FILE instead of stdout

答え4

パラメーターは-L (--location)まだ-I (--head)location-urlに不要なHEAD要求を作成します。

複数のリダイレクトがないと確信している場合は、位置追跡を無効にしてカール変数%{redirect_url}を使用することをお勧めします。

このコードは、指定されたURLに対して1つのHEAD要求を実行し、ロケーションヘッダーからリダイレクト_urlを取得します。

curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "https://goo.gl/QeJeQ4"

関連情報