Saya ingin memeriksa di mana satu URL dialihkan. Contohnya bisa berupa tautan dari halaman hasil pencarian Google (di mana klik selalu melalui server Google).
Bisakah saya melakukannya curl
?
Coba ini:
$ LOCATION=`curl -I http://raspberrypi.stackexchange.com/a/1521/86 | perl -n -e '/^Location: (.*)$/ && print "$1\n"'`
$ echo "$LOCATION"
/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521#1521
URL pengalihan Google sedikit berbeda. Mereka mengembalikan pengalihan Javascript, yang dapat dengan mudah diproses, tetapi mengapa tidak memproses URL asli dan untuk pergi bersama-sama?
$ URL="http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFAQFjAA&url=http%3A%2F%2Fwww.raspberrypi.org%2F&ei=rv8oUODIIMvKswa4xoHQAg&usg=AFQjCNEBMoebclm0Gk0LCZIStJbF04U1cQ"
$ LOCATION=`echo "$URL" | perl -n -e '/url=([a-zA-Z0-9%\.]*)/ && print "$1\n"'`
$ echo "$LOCATION"
http%3A%2F%2Fwww.raspberrypi.org%2F
$ echo "$LOCATION" | perl -pe 's/%([0-9a-f]{2})/sprintf("%s", pack("H2",$1))/eig'
http://www.raspberrypi.org/
Bahkan ada cara yang lebih mudah
itu akan mencetak
untuk URL
sumber
curl dapat dikonfigurasi untuk mengikuti arahan ulang dan untuk mencetak variabel setelah selesai. Jadi apa yang Anda minta dapat dicapai dengan perintah berikut:
Halaman manual menjelaskan parameter yang diperlukan seperti itu:
sumber
atau coba ini
sumber
curl -s -I 'http://yoururl'
dan isi tanggapannyacurl -s 'http://yoururl'
(Anda akan melihat bahwa google menggunakan javascript sederhana untuk pengalihan).Parameter
-L (--location)
dan-I (--head)
masih melakukan KEPALA yang tidak perlu-permintaan ke lokasi-url.Jika Anda yakin bahwa Anda tidak akan memiliki lebih dari satu pengalihan, lebih baik untuk menonaktifkan ikuti lokasi dan menggunakan curl-variable% {redirect_url}.
Kode ini hanya melakukan satu permintaan HEAD ke URL yang ditentukan dan mengambil redirect_url dari header-lokasi:
sumber