Terima kasih, itu membantu saya. Saya melakukan beberapa peningkatan dan membungkusnya dalam skrip pembantu "finalurl":
#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
-o
output ke/dev/null
-I
jangan benar-benar mengunduh, temukan saja URL finalnya-s
mode senyap, tidak ada bilah kemajuan
Ini memungkinkan untuk memanggil perintah dari skrip lain seperti ini:
echo `finalurl http://someurl/`
sebagai opsi lain:
$ 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>
Tapi itu tidak melewati yang pertama.
curl
-w
option dan subvariabel url_effective
adalah yang Anda cari.
Sesuatu seperti
curl -Ls -o /dev/null -w %{url_effective} http://google.com
Info lebih lanjut
-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
Lainnya
Anda mungkin ingin menambahkan -I
(itu adalah i
huruf besar ) juga, yang akan membuat perintah tidak mengunduh "badan" apa pun, tetapi kemudian juga menggunakan metode HEAD, yang bukan termasuk pertanyaan dan berisiko mengubah apa yang dilakukan server. Terkadang server tidak merespons HEAD dengan baik meskipun mereka merespons GET dengan baik.