Chciałbym sprawdzić, gdzie przekierowuje pojedynczy adres URL. Przykładem może być link ze strony wyników wyszukiwania Google (gdzie kliknięcie zawsze przechodzi przez serwer Google).
Czy mogę to zrobić curl
?
Spróbuj tego:
$ 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
Adresy URL przekierowań Google są nieco inne. Zwracają przekierowanie Javascript, które można łatwo przetworzyć, ale dlaczego nie przetworzyć oryginalnego adresu URL i przejść do zwijania się razem?
$ 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/
Jest jeszcze łatwiejszy sposób
wydrukuje się
dla adresu URL
źródło
curl można skonfigurować tak, aby śledził przekierowania i drukował zmienne po zakończeniu. Więc to, o co prosisz, można osiągnąć za pomocą następującego polecenia:
Strona podręcznika wyjaśnia niezbędne parametry:
źródło
lub spróbuj tego
źródło
curl -s -I 'http://yoururl'
i treść odpowiedzi za pomocącurl -s 'http://yoururl'
(zobaczysz, że Google używa prostego javascript do przekierowania).Parametry
-L (--location)
i-I (--head)
nadal niepotrzebne żądanie HEAD do adresu URL lokalizacji.Jeśli masz pewność, że nie będziesz mieć więcej niż jednego przekierowania, lepiej wyłączyć śledzenie lokalizacji i użyć zmiennej curl% {redirect_url}.
Ten kod wykonuje tylko jedno żądanie HEAD na podany adres URL i pobiera adres_przekierowania z nagłówka lokalizacji:
źródło