Edi: LWP::UserAgent: Nur die erste Seite wird geholt

Ich habe versucht, ein Skript zu schreiben, das die Ergebnisse einer Suchabfrage in einem File speichert. Dabei sollen mehrere Abfragen durchgeführt bzw. mehrere Resultat-Seiten gespeichert werden.

#!/usr/bin/perl

use LWP::UserAgent;

$url_result = "http://...";
$url_result1 = "http://...";

Erste Seite holen

$ua  = new LWP::UserAgent;

$ua->proxy('http' => "http:// ...");

$req = new HTTP::Request 'GET' => "$url_result";
$res = $ua->request($req);

$result = $res->is_success() ?
    $res->content() :
    "Error: " . $res->code() . " " . $res->message();

open (DAT, ">$work/result.txt");
print DAT $result;
close(DAT);

Zweite Seite holen

$ua1  = new LWP::UserAgent;

$ua1->proxy('http' => "http:// ...");

$req1 = new HTTP::Request 'GET' => "$url_result1";
$res1 = $ua1->request($req1);

$result1 = $res1->is_success() ?
    $res1->content() :
    "Error: " . $res1->code() . " " . $res1->message();

open (DAT, ">>$work/result.txt");
print DAT $result1;
close(DAT);

Eigentlich funktioniert alles. Ausser: Es wird jeweils nur die erste Resultat-Seite gespeichert. D.h. bei meinem Beispiel wird zwei Mal die erste Seite (mit dem Suchstring $url_result) in das File geschrieben.

Ich habe keine Ahnung, was ich übersehen oder vergessen habe...

Edi

  1. hi,

    $ua  = new LWP::UserAgent;
    $ua1  = new LWP::UserAgent;

    hmm, den Fehler seh ich auch nicht auf Anhieb, wohl aber, dass Dein Script einwenig chaotisch aussieht, zb brauchst Du den UserAgent $ua doch nur einmal zu erstellen.

    Tipp: Gibt die ge-fetchten Dokumente mal so aus, bevor Du die Datei schreibst.

    Viele Grüße, Rolf

    1. zb brauchst Du den UserAgent $ua doch nur einmal zu erstellen.

      Du hast Recht. Meine Überlegung dabei war, dass es an der Variable des UserAgent liegen könnte, dass immer dieselben Daten ins File geschrieben werden.

  2. hi,

    #!/usr/bin/perl

    use LWP::UserAgent;

    da fehlt use Fcntl ':flock';

    $url_result = "http://...";
    $url_result1 = "http://...";

    Erste Seite holen

    ...

    open (DAT, ">$work/result.txt");

    zum schreiben immer

    flock(DAT, LOCK_EX); #lock exclusive-> kein anderer darf...schreiben/lesen

    benutzen vor allem bei mehreren requests gleichzeitig->Grundregel Nr.1 !!

    print DAT $result;
    close(DAT);

    Zweite Seite holen

    ...

    open (DAT, ">>$work/result.txt");

    flock(DAT, LOCK_EX);#fehlt

    print DAT $result1;
    close(DAT);

    das andere wurde ja schon geschrieben,hab mir nicht weiter dein script studiert.
    Gruss
    Alain

    1. zum schreiben immer

      flock(DAT, LOCK_EX); #lock exclusive-> kein anderer darf...schreiben/lesen

      benutzen vor allem bei mehreren requests gleichzeitig->Grundregel Nr.1 !!

      Danke für den Hinweis! Leider funktioniert das Skript immer noch nicht...

      Ich habe es in der Zwischenzeit mit einer Suchabfrage in einer anderen Datenbank versucht: Die gewünschten Seiten werden in das File geschrieben. Bei Google dagegen erhalte ich die Fehlermeldung "HTTP Error 403 - Forbidden". Es scheint also, dass das Problem mit der Serverkonfiguration zusammenhängt.

      Edi