CGI-script aus cgi-scrip starten
Andreas Miller
- cgi
Hallo Allerseits,
ich versuche nun schon seit laengerem aus einem cgi-script,
welches ein Passwort prueft, eine andere cgi-datei aufzurufen
und dieser auch noch einen Parameter zu uebergeben. Diese
neue Datei soll dann die Ausgabe und alles weitere uebernehmen.
Insbesondere will ich nicht die GET Methode verwenden, da dann
geheime Informationen in der Adresszeile sichtbar waeren.
Hier sind einige Beispiele, wie ich es schon versucht habe und
gescheitert bin: (im ersten Script)
#Direkter Aufruf
exec 'zweitesscript.cgi';
#ueber ssi, aber der server will die .cgi-Datei nicht parsen
print "Content-Type: text/html\n\n";
print "<HTML>\n";
print "<BODY>\n";
print "<!--#exec cgi="/cgi-bin/zweitesscript.cgi?Parameter=value"-->\n";
print "</BODY>\n";
print "</HTML>\n";
#Browser simulieren (nach einer Anregung wie es in PHP funktioniert, s.o.)
$remote =IO::Socket::INET->new( Proto => "tcp",
PeerAddr => "localhost",
PeerPort => "http(80)",
);
unless ($remote) { die "cannot connect to http daemon on localhost" }
$remote->autoflush(1);
print $remote "POST /cgi-bin/zweitesscript.cgi HTTP/1.0\n";
print $remote "Accept: */*\n";
print $remote "Content-type: application/x-www-form-urlencoded\n";
print $remote "Content-lenght: 15\n\n";
print $remote "Parameter=Value\n";
# while ( <$remote> ) { print }; #diese Zeile rein oder raus aender nix
close $remote;
open(TEL, " telnet localhost 80");
print TEL "GET / HTTP/1.0\n\n"; #dies ist nur mal ein test, ob ueberhaupt was geht
Naja, soweit meine Versuche. Da ich in diesem Forum schon viele
schlaue Tricks gefunden habe, hoffe ich, dass mir irgendjemand
helfen kann. Vielen Dank schon mal im Voraus, ciao, Andreas
Hi,
ich versuche nun schon seit laengerem aus einem cgi-script,
welches ein Passwort prueft, eine andere cgi-datei aufzurufen
und dieser auch noch einen Parameter zu uebergeben. Diese
neue Datei soll dann die Ausgabe und alles weitere uebernehmen.
require, funktioniert allerdings nur einmal pro eingebundenes Script.
#ueber ssi, aber der server will die .cgi-Datei nicht parsen
Nein, das tut er in der Tat nicht.
Wenn mod_perl installiert ist, kannst Du aber Apache::Include dafür verwenden.
#Browser simulieren (nach einer Anregung wie es in PHP funktioniert, s.o.)
use LWP::Simple wäre einfacher :-)
HTH
Cheatah
Hallo,
ich versuche nun schon seit laengerem aus einem cgi-script,
welches ein Passwort prueft, eine andere cgi-datei aufzurufen
und dieser auch noch einen Parameter zu uebergeben. Diese
neue Datei soll dann die Ausgabe und alles weitere uebernehmen.require, funktioniert allerdings nur einmal pro eingebundenes Script.
Ergänzend zum Parameterproblem habe ich gerade folgendes ausprobiert:
$ENV{'QUERY_STRING'} = "Parameter";
do '/usr/local/etc/httpd/htdocs/meinserver/cgi-bin/cgi.pl';
Das funktioniert zumindest bei mir :-). Den Parameter kannst Du dann im aufgerufenen Skript ganz normal verarbeiten.
AlexBausW
Hallo Allerseits,
ich versuche nun schon seit laengerem aus einem cgi-script,
welches ein Passwort prueft,
Keine Lust auf http://www.teamone.de/selfaktuell/artikel/schroepl01.htm ?
»» eine andere cgi-datei aufzurufen
und dieser auch noch einen Parameter zu uebergeben.
Diese neue Datei soll dann die Ausgabe und alles weitere uebernehmen.
Aber dafür muß sie kein CGI-Skript sein - ein normaler Perl-Modul reicht.
Und dann hätten Deine erste Methode funktioniert.
#Direkter Aufruf
»» exec 'zweitesscript.cgi';
Geht nicht, weil Du keine CGI-Umgebung simulierst, die Dein Skript aber braucht.
(AlexBausW tut das in seinem Vorschlag - allerdings nur vor GET, nicht für POST.)
#ueber ssi, aber der server will die .cgi-Datei nicht parsen
Eben. Dein Ansatz, das selbst zu erledigen, ist schon der Richtige.
#Browser simulieren (nach einer Anregung wie es in PHP funktioniert, s.o.)
Das wäre der richtige Weg, falls das zweite Skript unbedingt CGI sein muß. (Allerdings mit LWP::Simple, wie bereits von Cheatah vorgeschlagen.)
Dies ist jedoch nur dann der Fall, wenn Du den Quelltext des zweiten Skripts nicht hast; andernfalls kannst Du dieses Skript, wenn es denn selbst auch direkt aufgerufen werden muß, in ein Kern-Skript und eine CGI-Schale aufteilen.
Hallo nochmal,
Geht nicht, weil Du keine CGI-Umgebung simulierst, die Dein Skript aber braucht.
(AlexBausW tut das in seinem Vorschlag - allerdings nur vor GET, nicht für POST.)
In dem vorliegenden Fall vermutete ich, daß die Parameter nicht in der
Url auftauchen sollen. Wenn ich $ENV{'QUERY_STRING'} in einem Skript ändere,
bleibt das doch für den User (und alle Anderen? ) unsichtbar! Ich benötige also nicht unbedingt "Post",
um Parameter zu übergeben !?!. Wenn dem nicht so ist, bitte ich um eine Korrektur (vor allem weil ich
vorhabe, das so ähnlich zu verwenden :-) !
AlexBausW
Geht nicht, weil Du keine CGI-Umgebung simulierst, die Dein Skript aber braucht.
(AlexBausW tut das in seinem Vorschlag - allerdings nur vor GET, nicht für POST.)
In dem vorliegenden Fall vermutete ich, daß die Parameter nicht in der
Url auftauchen sollen. Wenn ich $ENV{'QUERY_STRING'} in einem Skript ändere,
bleibt das doch für den User (und alle Anderen? ) unsichtbar! Ich benötige also nicht unbedingt "Post",
um Parameter zu übergeben !?!.
Das meinte ich nicht.
Ich meinte: Wenn man GET verwendet, dann kann man die Umgebung über QUERY_STRING bauen. Bei POST braucht man eine Eingabe über stdin, wenn ich mich jetzt spontan richtig erinnere - das geht natürlich auch.