URL-Weiterleitungsziel mit Wellung abrufen


24

Ich möchte überprüfen, wo eine einzelne URL umgeleitet wird. Ein Beispiel hierfür könnte ein Link von der Suchergebnisseite von Google sein (bei dem ein Klick immer über den Google-Server erfolgt).

Kann ich das tun mit curl?

Antworten:


18

Versuche dies:

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

Google Redirect-URLs unterscheiden sich geringfügig. Sie geben eine JavaScript-Weiterleitung zurück, die problemlos verarbeitet werden kann. Warum aber nicht die ursprüngliche URL verarbeiten und alle zusammen locken?

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

Referenz

  1. Zur URL-Dekodierung ...

Wie wäre es mit speziellen URLs mit Sonderzeichen (wie Googles Weiterleitungen), zB: google.com/…
syntagma

@REACHUS Die Weiterleitung wird in die Abfragezeichenfolge der angegebenen URL codiert.
Alex Chamberlain

@ REACHUS Keine Sorge - Sie können wahrscheinlich die 2 Perl-Anweisungen kombinieren.
Alex Chamberlain

20

Es gibt einen noch einfacheren Weg

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

es würde drucken

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

für URL

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

3
Das kostet jedoch mehr Zeit und Bandbreite, da Sie auch die zweite Seite herunterladen.
Unhammer

1
@unhammer Du hast recht, meine Antwort wurde aktualisiert, um nur Kopfanfragen zu erledigen.
Ismail

7

curl kann so konfiguriert werden, dass Weiterleitungen folgen und Variablen nach Abschluss gedruckt werden. Was Sie also verlangen, können Sie mit dem folgenden Befehl erreichen:

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

Die Manpage erklärt die notwendigen Parameter so:

-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

oder versuchen Sie es

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

Wie wäre es mit speziellen URLs mit Sonderzeichen (wie Googles Weiterleitungen), zB: google.com/…
syntagma

Setzen Sie die URL einfach in einfache Anführungszeichen, damit Ihre Shell die Sonderzeichen im Link ignoriert. Der angegebene Link leitet jedoch nicht zu einem anderen URL weiter. Der Statuscode der Antwort lautet 200 und nicht 3xx. Der von Ihnen gesuchte Uri ist im Uri selbst bzw. im Inhalt der Antwort versteckt. Zur weiteren Überprüfung können Sie den Header der Antwort mit curl -s -I 'http://yoururl'und den Inhalt der Antwort mit studieren curl -s 'http://yoururl'(Sie werden sehen, dass Google ein einfaches Javascript für die Weiterleitung verwendet).
user1146332

0

Die Parameter -L (--location)und -I (--head)immer noch unnötige HEAD-Anfrage an die Location-URL.

Wenn Sie sicher sind, dass Sie nicht mehr als eine Umleitung haben, ist es besser, die Verfolgungsposition zu deaktivieren und eine Curl-Variable% {redirect_url} zu verwenden.

Dieser Code führt nur eine HEAD-Anfrage an die angegebene URL durch und entnimmt redirect_url aus dem Location-Header:

curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "https://goo.gl/QeJeQ4"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.