PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : http/html weiterleitung erkennen



Trillian
14-01-2002, 12:03
Hallo zusammen,
wenn ich mit wget folgende Datei runterlade, erkennt er automatisch, dass in dieser Datei ein Verweis auf die eigentliche URL steckt.

Der HTML Code sieht so aus:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="http://www2.tagesschau.de/xml/tsrss/0,,,00.xml">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.12 Server at www2.tagesschau.de Port 80</ADDRESS>
</BODY></HTML>

Wie erkennt wget daran, dass das Dokument verschoben wurde?

Ich möchte sowas von einem Parser erkennen lassen, aber ich sehe darin keine eindeutige Struktur, d.h. der <title> sieht imho recht allgemein aus, die href auch etc.

Wäre nett, wenn jemand was genaueres dazu wüsste :)

Danke,
Trillian

sticky bit
14-01-2002, 21:23
302 Found
Ist ein Status-Code für HTTP-Responses, daran erkennt er es, wenn du dir mal die gesamte Response ansiehst inkl. Header, dann wirst du sehen dass der Status immer in der ersten Zeile steht.
Die 300er haben einige solcher Statuse bei denen ein Client automatisch redirekten kann wenn er will.
Näheres findest du hier beschrieben: http://www.ietf.org/rfc/rfc2616.txt

Trillian
14-01-2002, 22:06
Mmmh, dann liegt es wirklich nur am TITLE Tag? Das ist aber IMHO ziemlich schwammig :D

Naja, mal testen.

Danke dir :)

sticky bit
15-01-2002, 01:06
Nene, du hast mich falsch verstanden, es liegt nicht am Titel-Tag. Es liegt am Status Code im Header der HTTP-Message, das hat mit HTML nichts zu tun!!!
Was in der Payload ist ist da eigentlich egal, da kann auch gar nichts sein oder ein Bild oder sonst was für Unfug, aber es macht halt Sinn dem Benutzer auch mitzuteilen was gerade vor sich geht wenn ein unvorhergesehenes Ereignis auftritt, deshalb verpacken die meissten Server den Status-Code und Beschreibung halt noch mal extra in den Content damit der User auch was von hat, sofern sein Agent nicht eh gleich automatisch reagiert...

Trillian
15-01-2002, 10:20
Ah so, so hatte ich mir das auch eigentlich vorgestellt :D

Ich bin eben nur mit telnet in den Server rein, und hab "GET bla.html" gemacht und da kam keine Status-Nachricht.

Aber wenn das so ist, isses ja noch viel angenehmer :cool:

Notiz für später: Wenn man schon auf libcurl zurückgreift, sollte man mal die ganze Doku lesen :D

sticky bit
15-01-2002, 10:40
Doch doch, da kommt schon ein Status, aber nur bei einem vollständigen Request (HTTP/1.0, HTTP/1.1) also something lke:


GET / HTTP/1.0

wenn du nur GET / verwendest kommt kein Status das stimmt, ist nur ein einfacher Request (HTTP/0.9)...
Der Status steht immer in der ersten Zeile der Response nach der HTTP-Version (die Zahl ist der Code, die Beschreibung danach ist beliebig und für den menschlichen User zum Verständnis gedacht):


HTTP/1.1 200 OK
Date: Mon, 1 Januar 2000 00:00:00 GMT
Server: Apache/1.3.14 (Unix)
Connection: close
Content-Type: text/html

<html>
<head><title>Beispiel</title></head>
<body>Beispiel</body>
</html>


Interessant in deinem Fall bei einem 302er ist der Location Header in der Response, er verweist auf den URL wo die Resource zu finden ist:


HTTP/1.1 302 Found
Date: Mon, 1 Januar 2000 00:00:00 GMT
Server: Apache/1.3.14 (Unix)
Location: http://hiergehtsweiter.de/
Connection: close


Ich hoff ich hab jetzt alle Klarheiten beseitigt... *g*

Trillian
15-01-2002, 10:49
Vielen Dank für die Mühe :)
Jetzt hätte ich es auch selber hinbekommen :) :)

Aber libcurl nimmt einem das so schön ab :D
Ich hätte die komplette Doku nur mal früher lesen müssen *duck*