Supongamos que tenemos 3 enlaces: link1, link2, link3. link1 redirige a link2 y link2 redirige a link3. Entonces, ¿cómo ver eso con rizo?
8
Puedes ver los encabezados HTML usando -I
. Si la redirección es una meta-actualización, debería aparecer de esta manera como un encabezado.
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 redirección se realiza a través de PHP, puede detectar esto comparando a dónde va el navegador y dónde va realmente ... Hay muchas maneras de hacer esto con Python, JS, etc. Un proyecto que puede ser interesante para ti es phantomjs, un navegador sin cabeza con script.
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)
Entonces probablemente curl -w "%{redirect_url}" link1
le dará la primera URL de redireccionamiento.
Tal vez algo como esto te funcione:
URL="http://google.com"
while [ -n "${URL}" ]
do
echo $URL
URL=$(curl -sw "\n\n%{redirect_url}" "${URL}" | tail -n 1)
done