Thread Probleme mit LinkValidator (6 answers)
Opened by morph at 2006-03-15 18:00

morph
 2006-03-15 18:00
#7121 #7121
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi perl-community,

derzeit arbeite ich an einem LinkValidator. Dazu verwende ich das Modul LWP::UserAgent. Solange die Dokumente verfügbar sind, funktioniert das auch einwandfrei. Nur habe ich zwei Links, die mir Probleme bereiten.

Und zwar sind das die beiden Folgenden:
http://www.mainzkom.de/
http://www.polizei.propk.de/aktionen/kinderpornografie/index.xhtml

Im Falle von mainzkom, liegt es an einem redirect, wie ich über wget ermitteln konnte. Dort erhalte ich zwei mal einen 302er und wget folgt diesen Umleitungen problemlos. Auch die Webbrowser machen das richtig. Leider tut mein Skript dies nicht.

Im Falle von polizei.propk verstehe ich überhaupt nicht, warum das Skript mit einem 404er in die Fehlerbehandlung läuft. Die Kontrolle mittels wget hat ergeben, dass das angeforderte Dokument vorhanden ist.

Das ist der UserAgent, nebst Header-Daten:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$tmp  = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,";
$tmp .= "text/plain;q=0.8,image/png,*/*;q=0.5";
$agent->default_header("Accept" => $tmp);
$agent->default_header("Accept-Charset" => "UTF-8,*");
$agent->default_header("Accept-Encoding" => "gzip,deflate");

$tmp = "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3";
$agent->default_header("Accept-Language" => $tmp);

$agent->default_header("Connection" => "keep-alive");
$agent->default_header("Cache-Control" => "max-age=0");
$agent->default_header("Host" => "warp-factor.homelinux.net");
$agent->default_header("Keep-Alive" => "300");
$agent->default_header("Referer" => $ENV{HTTP_REFERER});

$tmp = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.10) Gecko/20050925 ";
$tmp .= "Firefox/1.0.4 (Debian package 1.0.4-2sarge5)";
$agent->agent($tmp);

$agent->timeout(20);


Und dies ist der auswertende Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$tmp = $cgi->param('l');

while (1) {
$response = $agent->head($tmp);
$response = $agent->get($tmp) if($response->code == 501);

if ( $response->code == 301 || # Moved permanetly
$response->code == 302 || # Found, temporary other location
$response->code == 307 ) # Temporary redirect
{
$tmp = $response->header("Location");
}
last if($response->code == 200);
last if($response->code == 404);
}
$dead = 1 if($response->code == 404);


Dieses Code-Fragment ist noch nicht fertiggestellt. Ich weiß, dass da noch einige Statuscodes fehlen, da ich sonst eine Enlosschleife habe. Aber um die geht es scheinbar auch gar nicht, denn mein Skript spuckt immer die Fehlerseite mit einem 404er aus.

Ein Gedanke war, dass diese Server einen 404 senden, wenn sie einen HEAD Request bekommen, weil dort ein ReverseProxy am Werk ist, also habe ich ihn auskommentiert und nur mit GET gearbeitet, das Verhalten war aber das Selbe.

Kann es sein, dass ich irgendetwas vergessen habe? Möglicherweise einen bestimmten Header? Oder kann sich jemand erklären, was da sonst schief läuft? Im Moment sehe ich den Wald vor Bäumen nicht. :-\

Vielen dank im Voraus.

-uw

View full thread Probleme mit LinkValidator