Alex: LWP::Simple

hallo zusammen!

ich finde meinen fehler nicht! ich habe ein kleines cgi-programm, dass eine datei, die von einem "anderen" cgi-prog. erzeugt und mit inhalt gefüllt wird, öffnet und den inhalt wieder ausgibt oder besser gesagt öffnen und ausgeben sollte. hat jemand einen hinweis für mich?
es erscheint immer die meldung "Could not fetch URL!". pfadangaben stimmen und daten.txt existiert, testprogramm omnihttpd. hier das skript:

#!/usr/bin/perl
use LWP::Simple;
$file = get ("http://localhost/cgi-bin/data/daten.txt");
if (!defined($file)) { print STDERR "Could not fetch URL!" }
print "Content-type: text/html\n\n";
print "<html><head><title>test</title></head>\n";
print "<body><h1>Dateninhalt</h1>\n";
@Zeilen = ("");
open(DAT, "<$file");
while(<DAT>)
{
push(@Zeilen,$_);
}
close(DAT);
for(@Zeilen)
{
print $_;
}
print "</body></html>\n";

wenn ich es zu laufen bringe, kann ich dann auch von ssl (https) aus auf  http zugreifen?
eine vermutlich dumme frage noch: wann schreibt man #!/user/bin.. und wann #!/user//local/bin.. jeder macht es anders.
danke, alex

  1. #!/usr/bin/perl
    use LWP::Simple;
    $file = get ("http://localhost/cgi-bin/data/daten.txt");

    Hm ... ich überlege gerade, wer diesem Programm erzählt,
    auf welche IP-Adresse es "localhost" abbilden muß.
    (DNS?)

    if (!defined($file)) { print STDERR "Could not fetch URL!" }
    print "Content-type: text/html\n\n";

    Schöner Versuch - noch eleganter wäre es, zuerst den
    HTTP-Header auszugeben und danach die Fehlermeldung.

    wenn ich es zu laufen bringe, kann ich dann auch von
    ssl (https) aus auf http zugreifen?

    Die Antwort auf diese Frage würde mich auch interessieren.
    (Gefühlsmäßig würde ich denken: Nein, weil Du das SSL-
    Protokoll nicht bedienst.)

    eine vermutlich dumme frage noch: wann schreibt man
    #!/user/bin.. und wann #!/user//local/bin..
    jeder macht es anders.

    "user" dürfte fast nie richtig sein. "usr" schon eher.
    Zwei "//" machen die Sache auch nicht besser (obwohl
    UNIX dazu tendiert, in dieser Hinsicht großzügig zu
    sein).

    Richtig: Jeder macht es anders - weil es keinen fest
    vorgeschriebenen Ort innerhalb eines (UNIX-)Dateisystems
    gibt, wo der Perl-Interpreter installiert werden muß.
    Der Webserver muß ihn aber finden - und Du mußt ihm
    dabei helfen.

    1. #!/usr/bin/perl
      use LWP::Simple;
      $file = get ("http://localhost/cgi-bin/data/daten.txt");

      Hm ... ich überlege gerade, wer diesem Programm erzählt,
      auf welche IP-Adresse es "localhost" abbilden muß.
      (DNS?)

      Aha! Frage 2 und 3 geklaert.
      Was meinst Du mit "auf welche IP-Adresse es "localhost" abbilden muss." localhost setze ich hier als Test offline ein (wird spaeter ersetzt durch http://www.....). oder verstehe ich den ganzen Sinn des Befehl nicht.

  2. Hi Alex,

    #!/usr/bin/perl
    use LWP::Simple;
    $file = get ("http://localhost/cgi-bin/data/daten.txt");

    Im Gegensatz zu Michaels Posting funktioniert dies auch mit localhost -> also soweit okay

    if (!defined($file)) { print STDERR "Could not fetch URL!" }

    Wenn die Datei daten.txt so wie oben angegeben auffindbar ist, kommt die Fehlermeldung auch nicht.
    Also: Prüfen, ob die URL stimmt (localhost ist, wie gesagt , möglich)

    open(DAT, "<$file");

    Hier ist ein Fehler:  $file ist keine Datei sondern ein Scalar, in welchem der gesamt Inhalt von daten.txt steht.
    Um die Datei daten.txt in eine andere Datei zu speichern mußt Du verwenden:

    $status = getstore($url,$filename);

    mit $url -> die zu ladenden URL
        $filename -> Name der Datei in welcher gespeichert werden soll
        $status -> Staus der Operation

    Die Datei $filename könntest Du dann öffnen und wie gewünscht weiterverarbeiten.

    Gruß
    Timothy

  3. hallo zusammen!

    ich finde meinen fehler nicht! ich habe ein kleines cgi-programm, dass eine datei, die von einem "anderen" cgi-prog. erzeugt und mit inhalt gefüllt wird, öffnet und den inhalt wieder ausgibt oder besser gesagt öffnen und ausgeben sollte. hat jemand einen hinweis für mich?

    hmm, leg mal die zu fetchende Datei nicht ins cgi-bin/resp. sub, und probiers mal so:

    ---fetchdoc---
    #!/usr/bin/perl
    use LWP::Simple;
    $file = get ("http://deinserver/daten.txt");
    if (!defined($file)) {
    print "Content-type: text/html\n\n";
    print "...krieg das Teil nicht ;-)";
    exit;
    }
    print "Content-type: text/html\n\n";
    print "<h2>Fang den Frühling ein</h2>\n hier der Inhalt der Datei: ";
    print $file;
    ---eof---; Rolf

    PS: SSL, siehe Netscape, #!usr/bin/perl ist der Pfad zum PERL-Interpreter

    1. Ach so ja, wenn Du direkten Zugriff zu den Verzeichnissen aufm Server hast, siehe Timothy 's Posting, ansonsten musst Du halt http bemühen ; Rolf

  4. Vielen Dank an Rolf, timothy und Michael fuer die Hilfe.

    Gruss Alex