Merci, ça m'a aidé. J'ai apporté quelques améliorations et l'ai enveloppé dans un script d'aide "finalurl":
#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
-o
sortie à/dev/null
-I
ne téléchargez pas réellement, découvrez simplement l'URL finale-s
mode silencieux, pas de barre de progression
Cela a permis d'appeler la commande depuis d'autres scripts comme ceci :
echo `finalurl http://someurl/`
comme autre option :
$ curl -i http://google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Sat, 19 Jun 2010 04:15:10 GMT
Expires: Mon, 19 Jul 2010 04:15:10 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
Mais ça ne dépasse pas le premier.
curl
est -w
option et la sous-variable url_effective
est ce que vous recherchez.
Quelque chose comme
curl -Ls -o /dev/null -w %{url_effective} http://google.com
Plus d'infos
-L Follow redirects -s Silent mode. Don't output anything -o FILE Write output to <file> instead of stdout -w FORMAT What to output after completion
Plus
Vous voudrez peut-être ajouter -I
(c'est un i
majuscule ) également, ce qui fera que la commande ne téléchargera aucun "corps", mais elle utilisera également la méthode HEAD, qui n'est pas ce que la question incluait et risque de changer ce que fait le serveur. Parfois, les serveurs ne répondent pas bien à HEAD même s'ils répondent bien à GET.