Curl. Проверить перенаправление

Предположим, что у нас есть 3 ссылки: link1, link2, link3. link1 перенаправляет ссылки на link2 и link2 на ссылку3. Итак, как это увидеть с завитом?

Вы можете видеть заголовки HTML, используя -I . Если переадресация является мета-обновлением, это должно было бы быть таким образом, как заголовок.

 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 

Если переадресация происходит через PHP, вы можете обнаружить это, сравнив, где находится браузер, и где он действует … Существует множество способов сделать это с помощью Python, JS и т. Д. Один проект, который может быть интересным для вас это phantomjs, сценарий безгласного браузера.

Попробуй это :

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

Или используя 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 

От 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) 

Вероятно, curl -w "%{redirect_url}" link1 даст вам первый URL перенаправления.

Возможно, что-то подобное работает для вас:

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