LWP::Simple
Alex
- cgi
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
#!/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.
#!/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.
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
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
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
Vielen Dank an Rolf, timothy und Michael fuer die Hilfe.
Gruss Alex