Aktuelle URL herausfinden nach Weiterleitung

  • Themenstarter Themenstarter IsNull
  • Beginndatum Beginndatum
I

IsNull

Guest
Hallo,

Wie ihr alle wisst, kann man URLs weiterleiten. Man gibt im Browser "http://test.ch/index.php?showsite=Apfel" ein. Daraufhin landet man auf "http://apfelsorten.ch/index.html".

Nun möchte ich grundsätzlich ein Tool, dass mir die aktuelle URL zurückliefert, wenn ich als Parameter die erste übergebe:

Code:
//PseudoCode:

getActiveURL(Referer_URL){

return ActiveURL 
}

Nun, gibt es hier für schon Tools, oder muss man sich sowas selber schreiben? Möglich muss es ja sein, denn der Browser zeigt ja auch die aktuelle URL an...

Ich hoffe jemand kennt sich hier ein wenig mit dem HTML Protokoll aus :)

Danke für aufschlussreiche Antworten,
Gruss
IsNull
 
Hallo, prinzipiell kannst du an den HTTP Returncodes recht genau ablesen, was vor sich geht.
Interessant dürften hier die 3xx Codes sein:
http://www.bolege.de/http-status-codes/#bereich3

Hier:
301 Moved permanently
302 found
307 Moved temporarily
303 See other

Der Header "Location: " gibt hierbei die korrekte Adresse an.

Z.B.
$ telnet planet-metax.de 80
Trying 213.239.194.254...
Connected to planet-metax.de.
GET / HTTP/1.1
Host: planet-metax.de


HTTP/1.1 302 Found
Date: Thu, 27 Sep 2007 16:47:52 GMT
Server: Apache
X-Powered-By: PHP/4.4.8_pre20070816-pl0-gentoo
location: http://www.planet-metax.de/html/
Content-Length: 0
Content-Type: text/html

Das ganze lässt sich natürlich automatisieren. Du musst nur eine TCP Verbindung zum Host auf Port 80 (oder wo auch immer ^^) aufbauen und dann so lange HTTP GET Requests an die entsprechende Adresse rausschicken, bis du keinen Statuscode 3xx mehr rausbekommt. Du kannst recht einfach (z.B. über einen regulären Ausdruck) den Statuscode und die Location aus dem Response rausfischen und dann ist's nicht mehr schwer. Wenn du nur den Header des Responses brauchst kannst du statt GET auch HEAD verwenden.

Also in Pseudocode:

Code:
function getUltimateDestination(String $url) {
$host = gethostname($url);
$path = getPathname($url);
$loop = true;

while($loop) {
$loop = false;
opensocket ($socket, $host, 80);
$socket.sendln("HEAD " + $path + " HTTP/1.1");
$socket.sendln("Host: " + $host);
$socket.sendln();
$answer = $socket.readall;

if ($answer.match("HTTP/1.1 3.*") {
  $loop = true;
  $location = extractLocationFromString($answer);
  $host = gethostname($location);
  $path = getPathname($location);
}

}
return $host + $path;
}

Ich hoffe, das hilft dir weiter.

mfg, metax.
 
Hey Danke für die detailierte Antwort, durch diese Stichworte und Pseudo Codes hast du mir sehr geholfen :)

...und nun sofort an's coden *freu*

Gruss
IsNull
 
Zurück
Oben