Muszę uzyskać końcowy adres URL po przekierowaniu strony, najlepiej za pomocą curl lub wget.
Na przykład http://google.com może przekierowywać do http://www.google.com .
Zawartość jest łatwa do pobrania (np. curl --max-redirs 10 http://google.com -L
), Ale interesuje mnie tylko końcowy adres URL (w poprzednim przypadku http://www.google.com ).
Czy można to zrobić, używając tylko wbudowanych narzędzi systemu Linux? (tylko wiersz poleceń)
:-)
-I
przeciwnym razie faktycznie pobierze plik.curl -A ...
przekierowaniem do oczekiwanej lokalizacji.Dzięki, to mi pomogło. Wprowadziłem kilka ulepszeń i zawarłem to w skrypcie pomocniczym „finalurl”:
-o
wyjście do/dev/null
-I
właściwie nie pobieraj, po prostu odkryj końcowy URL-s
tryb cichy, brak pasków postępuUmożliwiło to wywołanie polecenia z innych skryptów, takich jak ten:
źródło
finalurl() { curl --silent --location --head --output /dev/null --write-out '%{url_effective}' -- "$@"; }
jako inna opcja:
Ale nie wychodzi poza pierwszy.
źródło
Zwykle możesz to zrobić za pomocą wget.
wget --content-disposition
„url” dodatkowo, jeśli dodasz-O /dev/null
, nie będziesz faktycznie zapisywać pliku.wget -O /dev/null --content-disposition example.com
źródło
-O /dev/null
tylko z na-O-
. Lepiej:wget -O- --content-disposition example.com
Dziękuję Ci. Skończyło się na wdrożeniu twoich sugestii: curl -i + grep
Zwraca wartość pustą, jeśli witryna nie przekierowuje, ale to wystarczy, ponieważ działa przy kolejnych przekierowaniach.
Może być wadliwy, ale na pierwszy rzut oka działa dobrze.
źródło
To zadziała:
źródło
Parametry
-L (--location)
i-I (--head)
nadal robią niepotrzebne żądanie HEAD do adresu URL lokalizacji.Jeśli jesteś pewien, ż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 do określonego adresu URL i pobiera redirect_url z nagłówka lokalizacji:
Test prędkości
all_videos_link.txt
- 50 linków goo.gl + bit.ly, które przekierowują do youtube1. Z następującą lokalizacją
Wyniki:
2. Bez śledzenia lokalizacji
Wyniki:
źródło
Nie jestem pewien, jak to zrobić za pomocą curl, ale libwww-perl instaluje alias GET.
źródło
Czy możesz z tym spróbować?
Uwaga: po wykonaniu polecenia curl -I http://twoja-domena.com należy użyć pojedynczych cudzysłowów w poleceniu, np.
curl -I 'http://your-domain.com'
źródło
Możesz użyć grep. nie powie Ci też, gdzie to przekierowuje? Po prostu wyłap to.
źródło