Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4336[/thread]

LWP/Redirect erkennen

Leser: 2


<< >> 9 Einträge, 1 Seite
jan
 2004-08-13 02:02
#38026 #38026
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn du request benutzt, folgt es dem redirect automatisch und liefert dir die seite, auf die redirected wurde. willst du das nicht, benutz statt $ua->request einfach $ua->simple_request
jan
 2004-08-13 03:07
#38027 #38027
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
naja, dazu müsstest du doch nur prüfen, ob is_redirect true ist und dann entsprechend den location-header auslesen, eine kleine schleife und das läuft mit simple_redirect.


und hier dürfte dann auch eine hübsche lösung sein:
Quote
Noticing Redirection
Remember that ->request (as in ->head) can cause several real request/response cycles. Check ->previous!
To report redirection:

...
if(! $resp->is_success) {
print $url, "\n => ", $resp->status_line, "\n"
} elsif($resp->previous and $resp->previous->is_redirect) {
print "## Moved $url\n## => ", $resp->request->url, "\n";
} else {
print "## OK: $url\n";
}


http://www.easyya.com/lwp/LWP_seanBurke.html
esskar
 2004-08-13 06:04
#38028 #38028
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ersetzte redirect durch simple_redirect und rufe dich rekusriv auf
Johannes
 2004-08-14 23:15
#38029 #38029
User since
2004-08-12
8 Artikel
BenutzerIn
[default_avatar]
Naja, per simplem
Code: (dl )
1
2
3
4
elsif ($resp->is_redirect) {
$url = $resp->headers()->{'location'};
check($url);
}

klappt es, k.A. was ich da so lange dran rumgedoktort habe.
Gast Gast
 2004-08-13 01:22
#38030 #38030
Hallo.

Wenn ich folgendes[1] Script testen will, so versagt es kläglich, bei einem Redirect :-/

[LUNA] C:\>perl check.pl http://www.nabooisland.com/temp/dcsm.htm
http://www.nabooisland.com/temp/dcsm.htm wurde seit Tue, 10 Aug 2004 21:21:41 GMT nicht geaendert.

Ein 301er wird geliefert, was sich mittels netcat oder was auch immer verifizieren lässt:

[LUNA] C:\>nc www.nabooisland.com 80
HEAD /temp/dcsm.htm HTTP/1.0
Host: www.nabooisland.com

HTTP/1.1 301 Moved Permanently

Irgendwo muss ein Denkfehler in dem Script stecken :-/

[1] http://www.nabooisland.com/perl/check
Johannes
 2004-08-13 02:58
#38031 #38031
User since
2004-08-12
8 Artikel
BenutzerIn
[default_avatar]
[quote=jan,13.08.2004, 00:02]wenn du request benutzt, folgt es dem redirect automatisch und liefert dir die seite, auf die redirected wurde. willst du das nicht, benutz statt $ua->request einfach $ua->simple_request[/quote]
Ersteres wäre genau das was ich will, funktioniert halt scheinbar irgendwie nur nicht.

http://www.nabooisland.com/temp/dcsm.htm leitet per 301 Status code nach http://www.nabooisland.com.

Folglich sollte doch mein kleines Script folgendes ausgeben: http://www.nabooisland.com wurde seit Tue, 10 Aug 2004 22:48:29 nicht geaendert.

und nicht:
http://www.nabooisland.com/temp/dcsm.htm wurde seit ...

Den '$req->header('If-Modified-Since' => time2str($mtime));' hatte ich in der elsif {} - Abfrage vergessen, bringt aber halt nichts, wenn der Ausdruck scheinbar nie wahr wird.

Mein Script sollte halt "einfach" dafür sorgen, dass der UA auch Redirects folgt (301, 302, 307) und die richtige URL bezüglich der Änderung eines Dokumentes hin überprüft.

Hier nochmal die Anfrage mittels Netcat:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[LUNA] C:\>nc www.nabooisland.com 80
HEAD /temp/dcsm.htm HTTP/1.1
If-Modified-Since: Tue, 10 Aug 2004 22:43:52 GMT
Host: www.nabooisland.com
Connection: close

HTTP/1.1 301 Moved Permanently
Date: Thu, 12 Aug 2004 22:45:46 GMT
Server: Apache/1.3.31
Location: http://www.nabooisland.com
Connection: close
Content-Type: text/html; charset=iso-8859-1

...

[LUNA] C:\>nc www.nabooisland.com 80
HEAD / HTTP/1.1
Host: www.nabooisland.com
If-Modified-Since: Tue, 10 Aug 2004 22:43:52 GMT
Connection: close

HTTP/1.1 304 Not Modified
Date: Thu, 12 Aug 2004 22:41:07 GMT
Server: Apache/1.3.31
Connection: close
ETag: "42405e-1a77-40a530e6"
Johannes
 2004-08-13 05:14
#38032 #38032
User since
2004-08-12
8 Artikel
BenutzerIn
[default_avatar]
Tja, wenn ich dessen Script zusammenpicke, dann klappt es, bei mir allerdings nicht, wobei ich mein Script nocheinmal etwas umgeschrieben habe. Was stimmt denn an jener Subroutine nicht, dass der Redirect nicht durchgeführt wird?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sub check {
my ($url) = shift;
$url =~ m{http://([^\:|/]*)}s;
my $host = $1;
my $req = HTTP::Request->new(HEAD => $url);
$req->header('Host' => $host);
$req->header('If-Modified-Since' => time2str($mtime));
my $resp;
$resp = $ua->request($req) or warn "Response fuer $url fehlgeschlagen: ",$resp->status_line,"\n";
print $resp->is_success;

if(! $resp->is_success and $resp->code == RC_NOT_MODIFIED) {
print "$url wurde seit ",time2str($mtime)," nicht geaendert.\n";
} elsif (! $resp->is_success) {
print $url, " => ", $resp->status_line, "\n";
} elsif($resp->previous and $resp->previous->is_redirect) {
check($resp->request->url);
} else {
print "$url wurde geaendert!\n";
}
}


Ganz im Gegensatz dazu klappt eben

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub check_url {  # given an absolute URL
my $url = $_[0];
my $resp = $browser->head($url);
if(!$resp->is_success) {
print $url, "\n => ", $resp->status_line, "\n";
} elsif($resp->previous and $resp->previous->is_redirect) {
check_url($resp->request->url);
# print "## Moved $url\n## => ", $resp->request->url, "\n";
} else {
print "## OK: $url\n";
}
}
\n\n

<!--EDIT|Johannes|1092360025-->
Johannes
 2004-08-13 19:30
#38033 #38033
User since
2004-08-12
8 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,13.08.2004, 04:04]ersetzte redirect durch simple_redirect und rufe dich rekusriv auf[/quote]

Hmm? $resp->previous->is_redirect durch $resp->previous->is_simple_redirect? Ich bin irgendwie schwer von Begriff.

Von dem Abgesehen: Bei der Subroutine check_url() klappt es doch auch ohne?!

Naja, könntest Du (oder irgendwer) mir check() mal schnell entsprechend anpassen? Ich bin irgendwie noch genau so verwirrt wie heute Nacht :-/
jan
 2004-08-14 23:19
#38034 #38034
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich schätze mal, das war genau das, was esskar in seiner nachtverwirrung meinte ;)
<< >> 9 Einträge, 1 Seite



View all threads created 2004-08-13 02:02.