Danke, das hat mir geholfen. Ich habe einige Verbesserungen vorgenommen und das in ein Hilfsskript "finalurl" gepackt:
#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
-o
Ausgabe nach/dev/null
-I
nicht wirklich herunterladen, sondern nur die endgültige URL entdecken-s
Ruhemodus, keine Fortschrittsbalken
Dadurch war es möglich, den Befehl von anderen Skripten wie folgt aufzurufen:
echo `finalurl http://someurl/`
als weitere 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>
Aber es geht nicht über den ersten hinaus.
curl
ist -w
Option und die Untervariable url_effective
ist das, wonach Sie suchen.
So etwas wie
curl -Ls -o /dev/null -w %{url_effective} http://google.com
Weitere Informationen
-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
Mehr
Vielleicht möchten Sie -I
hinzufügen (das ist ein großer i
), was dazu führt, dass der Befehl keinen "Body" herunterlädt, aber er verwendet dann auch die HEAD-Methode, die nicht in der Frage enthalten ist, und riskiert, zu ändern, was der Server tut. Manchmal reagieren Server nicht gut auf HEAD, selbst wenn sie gut auf GET reagieren.