Como descobrir onde um link é redirecionado

3

Atualmente, estou trabalhando em um script que atualiza um arquivo. O arquivo tem várias versões. Os mais importantes têm links estáticos. Estes são redirecionados para o arquivo real que é baixado usando wget . Eu descobri que wget tem uma bandeira que imprime os cabeçalhos recebidos. Existe uma lista de locais. A última localização entre o cabeçalho é o URL real. Eu preciso entender isso!

Minha idéia era usar wget -S para obter o cabeçalho (preciso de outro sinalizador que impeça o download e a criação do arquivo). Em seguida, use um pipe para analisar as linhas e capturar a última linha contendo location . Eu acho que isso poderia ser realizado usando grep -l -i "location:" | tail -l . Então eu deveria ficar com uma única linha que pode ser facilmente analisada.

Então o comando seria algo como isto:

# The -??? flag is the one that prevents the file from downloading. (I don't know it)
Location=$(wget -S -??? $URL | grep -l -i "location:" | tail -l)

Minha pergunta que sinalizador eu tenho que usar para não baixar o arquivo com wget ou existe outra maneira / comando para fazer isso?

    
por BrainStone 03.09.2013 / 18:14

1 resposta

7

O que você deseja é uma solicitação HEAD, mas wget não oferece suporte a ela; curl faz.

Sua distribuição provavelmente tem curl em repositórios.

curl -s -I $URL -L | awk '/Location: (.*)/ {print $2}' | tail -n 1

$ URL=http://unix.stackexchange.com/questions/89282/
$ curl -s -I $URL | awk '/Location: (.*)/ {print $2}' | tail -n 1
/questions/89282/how-to-figure-out-where-a-link-gets-redirected
$ _

Aqui:

  • -s impede que curl mostre uma barra de progresso;
  • -I torna curl um pedido HEAD;
  • -L faz curl seguir redirecionamentos (obrigado @brianstone), você pode querer ou não incluir isso, dependendo de quais cabeçalhos de redirecionamento você deseja rastrear;
  • o script awk imprime a expressão correspondente nos parênteses, apenas a parte local do URI.
por 03.09.2013 / 18:32