Получите цель перенаправления URL с завихрением

Прочитайте книгу Nginx Сервер HTTP

Это - особенно хороший текст для новичков - первые главы объясняют все, что необходимо знать для начала работы с Linux, и т.д.

Плюс Вы изучите установку очень хорошего сервера Nginx - который завоевывает популярность в эти дни.

24
28.08.2012, 21:10
5 ответов

Попробуйте это:

$ 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

URL перенаправления Google немного отличаются. Они возвращают перенаправление JavaScript, которое могло легко быть обработано, но почему бы не обработать исходный 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 декодирует...
18
27.01.2020, 19:40
  • 1
    Как насчет специальных URL со специальными символами (как перенаправления Google), например: google.com / … –  syntagma 13.08.2012, 16:24
  • 2
    @REACHUS перенаправление кодируется в строку запроса данного URL. –  Alex Chamberlain 13.08.2012, 16:28
  • 3
    @REACHUS Никакие заботы - можно, вероятно, объединить 2 оператора жемчуга. –  Alex Chamberlain 13.08.2012, 17:12

или попробуйте это

curl -s -o /dev/null -I -w "HTTP_CODE: %{http_code}\nREDIRECT_URL: %{redirect_url}\n" http://raspberrypi.stackexchange.com/a/1521/86
4
27.01.2020, 19:40
  • 1
    Как насчет специальных URL со специальными символами (как перенаправления Google), например: google.com / … –  syntagma 13.08.2012, 16:25
  • 2
    просто поместил URL в одинарные кавычки, так, чтобы Ваша оболочка проигнорировала специальные символы в ссылке. Но ссылка, которую Вы заявили, не перенаправляет к другому uri, код состояния ответа 200 и не 3xx. Uri, который Вы ищете, скрыт в самом uri соответственно в контенте ответа. Для дальнейшего исследования можно изучить заголовок ответа с curl -s -I 'http://yoururl' и контент ответа с curl -s 'http://yoururl' (Вы будете видеть, что Google использует простой JavaScript для перенаправления). –  user1146332 13.08.2012, 17:30

Есть еще более простой способ

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
20
27.01.2020, 19:40

curl можно настроить для отслеживания перенаправлений и печати переменных после завершения. Итак, то, о чем вы просите, может быть достигнуто с помощью следующей команды:

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
7
27.01.2020, 19:40

Параметры -L (--location)и -I (--head)по-прежнему выполняют ненужный запрос HEAD -к URL-адресу местоположения -.

Если вы уверены, что у вас будет не более одного перенаправления, лучше отключить отслеживание местоположения и использовать переменную curl -%{redirect _url}.

Этот код выполняет только один запрос HEAD -к указанному URL-адресу и получает URL-адрес перенаправления _из заголовка местоположения -:

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

Теги

Похожие вопросы