Obtenha o alvo de redirecionamento da URL com curl

21

Gostaria de verificar onde um único URL é redirecionado. Um exemplo disso pode ser um link da página de resultados de pesquisa do Google (onde um clique sempre passa pelo servidor do Google).

Posso fazer isso com curl ?

    
por syntagma 12.08.2012 / 20:40

4 respostas

16

Tente isto:

$ 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

Redirecionamentos do Google

Os URLs de redirecionamento do Google são um pouco diferentes. Eles retornam um redirecionamento de Javascript, que poderia ser facilmente processado, mas por que não processar o URL original e ir enrolar todos juntos?

$ 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/

Referência

  1. Para decodificar url ...
por 12.08.2012 / 21:12
16

Existe uma maneira ainda mais fácil

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

imprimiria

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

para URL

http://raspberrypi.stackexchange.com/a/1521/86
    
por 24.09.2014 / 13:10
4

ou tente isso

curl -s -o /dev/null -I -w "HTTP_CODE: %{http_code}\nREDIRECT_URL: %{redirect_url}\n" http://raspberrypi.stackexchange.com/a/1521/86
    
por 12.08.2012 / 21:20
3

curl pode ser configurado para seguir redirecionamentos e imprimir variáveis após a conclusão. Então, o que você pergunta pode ser obtido com o seguinte comando:

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

A página man explica os parâmetros necessários assim:

-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
    
por 20.10.2016 / 12:05

Tags