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?

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.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.