Boucle. Vérifier la redirection

8

Supposons que nous ayons 3 liens: link1, link2, link3. link1 redirige vers link2 et link2 redirige vers link3. Alors, comment voir ça avec curl?

ipeacocks
la source

Réponses:

13

Vous pouvez voir les en-têtes HTML à l'aide de -I. Si la redirection est une méta-actualisation, elle devrait apparaître de cette manière en tant qu'en-tête.

lamp@oort ~ $ curl -I http://google.com<br>
HTTP/1.1 301 Moved Permanently<br>
Location: http://www.google.com/<br>
Content-Type: text/html; charset=UTF-8<br>
Date: Thu, 21 Nov 2013 14:59:13 GMT<br>
Expires: Sat, 21 Dec 2013 14:59:13 GMT<br>
Cache-Control: public, max-age=2592000<br>
Server: gws<br>
Content-Length: 219<br>
X-XSS-Protection: 1; mode=block<br>
X-Frame-Options: SAMEORIGIN<br>
Alternate-Protocol: 80:quic

Si la redirection se produit via PHP, vous pouvez le détecter en comparant où va le navigateur et où il va effectivement ... Il existe un tas de façons de le faire avec Python, JS, etc. Un projet qui peut être intéressant phantomjs, un navigateur sans tête scriptable.

nandoP
la source
5

Essaye ça :

for link in link1 link2 link3; do
    curl -Is "$link" | awk '/Location/{print $2}'
done

Ou en utilisant :

for link in link1 link2 link3; do
    printf '%s\n%s\n\n%s\n' 'HEAD / HTTP/1.1' "Host: $link" 'Connexion:close' |
    netcat $link 80 | awk '/Location/{print $2}'
done
Gilles Quenot
la source
4

De man curl:

   -w, --write-out <format>
          Defines what to display on stdout after a completed and
          successful operation.

          <...>

          redirect_url   When an HTTP request was made without -L to
                         follow redirects, this variable will show the 
                         actual URL a redirect would take you to.
                         (Added in 7.18.2)

Vous curl -w "%{redirect_url}" link1obtiendrez donc probablement la première URL de redirection.

Peut-être que quelque chose comme ça fonctionne pour vous:

URL="http://google.com"
while [ -n "${URL}" ]
do
    echo $URL
    URL=$(curl -sw "\n\n%{redirect_url}" "${URL}" | tail -n 1)
done
FloHimself
la source