URL'nin yönlendirme hedefini curl ile alın


24

Tek bir URL’nin nereye yönlendirildiğini kontrol etmek istiyorum. Buna bir örnek, Google’ın arama sonucu sayfasından bir bağlantı olabilir (bir tıklamanın her zaman Google sunucusundan geçtiği).

Bunu yapabilir miyim curl?

Yanıtlar:


18

Bunu dene:

$ 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

Google Yönlendirmeleri

Google yönlendirme URL’leri biraz farklıdır. Kolayca işlenebilecek bir Javascript yönlendirmesi döndürürler, ancak neden orijinal URL'yi işleyemiyorlar ve hep birlikte kıvrılıyorlar?

$ 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/

Referans

  1. URL kod çözme için ...

Özel karakterli (URL’lerin yönlendirmeleri gibi) özel URL’lere ne dersiniz, örneğin: google.com/…
syntagma 13:12

@REACHUS Yönlendirme, verilen URL'nin sorgu dizesine kodlanmıştır.
Alex Chamberlain

@REACHUS Endişeye gerek yok - muhtemelen 2 perl ifadesini birleştirebilirsiniz.
Alex Chamberlain,

20

Daha kolay bir yolu var

curl -w "%{url_effective}\n" -I -L -s -S $URL -o /dev/null

yazdırırdı

http://raspberrypi.stackexchange.com/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521

URL için

http://raspberrypi.stackexchange.com/a/1521/86

3
Yine de ikinci sayfayı indirdiğiniz için daha fazla zaman ve bant genişliği kullanıyor.
utanç verici

1
@unhammer Haklısın, sadece baş taleplerde bulunmak için cevabımı güncelledim.
ismail

7

curl , yönlendirmeleri takip edecek ve tamamlandıktan sonra değişkenleri yazdıracak şekilde yapılandırılabilir. Öyleyse istediğin şeye aşağıdaki komutla ulaşılabilir:

curl -Ls -w %{url_effective} -o /dev/null https://google.com

Man sayfa böyle gerekli parametreleri açıklar:

-L, --location          Follow redirects (H)
-s, --silent            Silent mode (don't output anything)
-w, --write-out FORMAT  Use output FORMAT after completion
-o, --output FILE       Write to FILE instead of stdout

4

ya da bunu dene

curl -s -o /dev/null -I -w "HTTP_CODE: %{http_code}\nREDIRECT_URL: %{redirect_url}\n" http://raspberrypi.stackexchange.com/a/1521/86

Özel karakterli (Google’ın yönlendirmeleri gibi) özel URL’lere ne dersiniz, örneğin: google.com/…
syntagma 13:12

URL'yi tek tırnak işaretleri içine koyun, böylece kabuğunuz bağlantıdaki özel karakterleri yok sayar. Ancak, belirttiğiniz bağlantı başka bir uri'ye yönlendirmiyor, yanıtın durum kodu 200 ve 3xx değil. Aradığınız uri, sırasıyla yanıtın içeriğinde uri'nin içinde gizlidir. Daha fazla inceleme için, yanıtın başlığını ve yanıtın curl -s -I 'http://yoururl'içeriğini inceleyebilirsiniz ( curl -s 'http://yoururl'google’ın yönlendirme için basit bir javascript kullandığını göreceksiniz).
user1146332 13:30

0

Parametreler -L (--location)ve -I (--head)hala konum-url'ye gereksiz HEAD-istek yapıyor.

Birden fazla yönlendirmeye sahip olmadığınızdan eminseniz, takip konumunu devre dışı bırakmak ve% {redirect_url} bir curl değişkeni kullanmak daha iyidir.

Bu kod belirtilen URL'ye yalnızca bir HEAD isteği yapar ve redirect_url dosyasını konum başlığından alır:

curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "https://goo.gl/QeJeQ4"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.