Supposons que nous ayons 3 liens: link1, link2, link3. link1 redirige vers link2 et link2 redirige vers link3. Alors, comment voir ça avec curl?
8
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.
Essaye ça :
for link in link1 link2 link3; do
curl -Is "$link" | awk '/Location/{print $2}'
done
Ou en utilisant netcat :
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
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}" link1
obtiendrez 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