Я хотел бы проверить, куда перенаправляет один URL. Примером этого может быть ссылка со страницы результатов поиска Google (где клик всегда проходит через сервер Google).
Могу ли я сделать это с curl
?
Попробуй это:
$ 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
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/
Есть еще более простой способ
это напечатало бы
для URL
источник
curl может быть настроен для отслеживания перенаправлений и печати переменных после завершения. Так что то, что вы просите, может быть достигнуто с помощью следующей команды:
Страница man объясняет необходимые параметры следующим образом:
источник
или попробуйте это
источник
curl -s -I 'http://yoururl'
и содержание ответаcurl -s 'http://yoururl'
(вы увидите, что Google использует простой javascript для перенаправления).Параметры
-L (--location)
и-I (--head)
до сих пор делают ненужный HEAD-запрос к location-url.Если вы уверены, что у вас будет не более одного перенаправления, лучше отключить отслеживание местоположения и использовать переменную curl% {redirect_url}.
Этот код выполняет только один HEAD-запрос к указанному URL и берет redirect_url из location-header:
источник