Schrift
[thread]693[/thread]

Probleme mit LinkValidator



<< >> 7 Einträge, 1 Seite
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
cbxk1xg
 2006-03-15 18:36
#7122 #7122
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Ich bin mir nicht ganz sicher, aber könnte es eventuell an der Sub-Sub-Domain liegen? www.polizei.propk.de

Möglicherweise kommt LWP damit nicht klar. Probier doch mal eine andere Adresse die den gleichen Aufbau wie www.polizei.propk.de hat.

Edit: Habe gerade mal http://polizei.propk.de/aktionen/kinderpornografie/index.xhtml eingegeben. Das geht auch. Probier's doch mal so.\n\n

<!--EDIT|cbxk1xg|1142440706-->
renee
 2006-03-15 22:05
#7123 #7123
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also LWP hat da wohl keine Probleme:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
C:\Dokumente und Einstellungen\Renee>perl -MLWP::Simple -e "print get('http://ww
w.polizei.propk.de/aktionen/kinderpornografie/index.xhtml')"

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x
html1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">

<head>
<title>www.polizei-beratung.de - Keine Kompromisse im Kampf gegen Kinder
pornografie</title>
[...]
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-03-15 22:12
#7124 #7124
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe auch das Gefühl, dass Du es etwas umständlich machst. So bekomme ich einen 200er:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new();
my $request = HTTP::Request->new(GET => 'http://www.polizei.propk.de/aktionen/kinderpornografie/index.xhtml');

my $response = $ua->request($request);
print $response->status_line,"\n";

Code: (dl )
1
2
C:\Perl\community>mw.pl
200 OK
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
morph
 2006-03-15 22:25
#7125 #7125
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
OK, vielen Dank für Eure Antworten. Dann werde ich es auch mal über HTTP::Request probieren.

Ich melde mich dann morgen wieder, und berichte wie's gelaufen ist.

-uw
renee
 2006-03-15 22:33
#7126 #7126
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
statt status_line kannst Du natürlich auch wieder code verwenden, damit Du nur den Zahlencode hast...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
morph
 2006-03-17 17:19
#7127 #7127
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

mein Problem war scheinbar mein virtueller Server, auf dem ich entwickle. Meine Domain nach außen ist ja war-factor.homelinux.net, eine DynDNS-Domain. Nun habe ich aber auch den virtuellen Server dev.el.op, der von außen nicht zu erreichen ist. Die betreffenden Server scheinen einen Sicherheitsmechanismus zu haben, der den Zugriff verhindert, wenn ein nicht existenter hostname im Request auftaucht. Zwar habe ich im Requestaufbau darauf geachtet, dass der andere Hostname eingtragen wird, was aber scheinbar nicht gegriffen hat (das muss ich noch ermitteln). Einen Gedanken, den ich habe, geht in Richtung Umgebungsvariablen des Apache.

Jetzt habe ich die ganze Geschichte (lokale Statistikseite/Validator) voneinander getrennt. Der Validator läuft nun als einfacher Cronjob, der meine Datenbank aktualisiert und mit dem Webserver selbst überhaupt nichts zu tun hat, und schon funzt die Sache.

-uw
<< >> 7 Einträge, 1 Seite



View all threads created 2006-03-15 18:00.