Script aufrufen und Variablen übergeben
Markus
- perl
Hallo,
irgendwie scheint die Suchfunktion des Forums nicht zu funktionieren, deshalb nicht gleich schlagen, falls diese Frage schon öfter gestellt wurde.
So nun zu meinem Problem.
Ich möchte von einem Script aus ein anderes Script aufrufen, und an dieses Variablen weitergeben.
Konkret soll folgendes passieren: Das erste Script wird von einem HTML-Formular aufgerufen, in diesem Script soll je nach Eingabe eine Variable verändert werden und mit den neuen Werten soll ein 2. Script aufgerufen werden, das auf einem anderen Server liegt.
Ich hab's schon mit exec versucht, aber irgendwie klappt's nicht so recht. Wie muss ich das u.a. Script fortsetzten?
So weit bin ich bisher:
#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
my @Feldnamen = $cgi->param();
my $name = $cgi->param($Feldnamen[0]);
my $pw = $cgi->param($Feldnamen[1]);
if ($name eq "mike") {
$name = "account1"
}
if ($name eq "olli") {
$name = "account2"
}
if ($name eq "dave") {
$name = "account3"
}
Bin für jeden Tipp dankbar.
Gruß
Markus
Hi,
Ich hab's schon mit exec versucht, aber irgendwie klappt's nicht so recht. Wie muss ich das u.a. Script fortsetzten?
Du brauchst das LWP-Modul.
So weit bin ich bisher:
#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);my @Feldnamen = $cgi->param();
my $name = $cgi->param($Feldnamen[0]);
my $pw = $cgi->param($Feldnamen[1]);if ($name eq "mike") {
$name = "account1"
}if ($name eq "olli") {
$name = "account2"
}if ($name eq "dave") {
$name = "account3"
}Hier soll jetzt ein Script aufgerufen werden,
das auf einem anderen Server liegt
und die Variablen $name und &pw sollen an
das 2. Script weitergegeben werden.
Das 1. Script sollte, wenn möglich, beendet werden.
»»
Ohne zu testen:
use LWP::UserAgent;
my $ua = new LWP::USerAgent;
my $scripturl = "http://www.irgendwo.irdentwas.de/cgi-bin/script.pl";
my $parameter = "name=$name&pwd=$pwd";
my $header = new HTTP::Headers (
Content_Type => 'application/x-www-form-urlencoded'
)
my $request = new HTTP::Request('GET',$scripturl,$header,$parameter);
my $response = $ua->request($request);
my $resulttext = $response->content;
print "Content-Type: text/html\n\n";
print $resultttext;
Ciao,
Wolfgang
Hi,
Ohne zu testen:
my $ua = new LWP::USerAgent;
glaub ich Dir ungesehen ;-)
my $header = new HTTP::Headers (
Content_Type => 'application/x-www-form-urlencoded'
)
Nicht, dass LWP::UserAgent prinzipiell abzulehnen ist, im Gegenteil; aber gibt es einen bestimmten Grund, weshalb Du es bei einem Standard-GET-Request dem LWP::Simple vorziehst?
Cheatah
Hi,
Ohne zu testen:
my $ua = new LWP::USerAgent;glaub ich Dir ungesehen ;-)
my $header = new HTTP::Headers (
Content_Type => 'application/x-www-form-urlencoded'
)Nicht, dass LWP::UserAgent prinzipiell abzulehnen ist, im Gegenteil; aber gibt es einen bestimmten Grund, weshalb Du es bei einem Standard-GET-Request dem LWP::Simple vorziehst?
Ja, meist bau ich aus simplen Skripten komplexere Skripten auf
und benötige dann schon mehr .)
Aber in diesem Fall war es eher so, dass ich nur gerade das Beispiel
zur Hand hatte ...
Ciao,
Wolfgang
Hi,
Ja, meist bau ich aus simplen Skripten komplexere Skripten auf
und benötige dann schon mehr .)
*g* das ist dann Stufe zwei des Lerneffektes :-)
Aber in diesem Fall war es eher so, dass ich nur gerade das Beispiel
zur Hand hatte ...
Ach so. Dann darf ich Dir ein anderes Beispiel an die Hand geben:
/usr/bin/perl -MLWP::Simple -e "getprint('http://blablub/');"
Deswegen heißt das Modul "Simple" ;-)
Cheatah
Hi,
mit den neuen Werten soll ein 2. Script aufgerufen werden, das auf einem anderen Server liegt.
es existiert kein Weg, per HTTP Variablen zu übergeben - Parameter sind jedoch möglich, in der bekannten URL-Form oder als POST-Parameter.
Ich hab's schon mit exec versucht, aber irgendwie klappt's nicht so recht.
Das ist kein Wunder, weil auf Deinem Filesystem keine ausführbare Datei namens "http://bla/blub?foo=bar" existiert. Du möchtest nichts ausführen, sondern das Ergebnis eines HTTP-Requests erhalten - also einen HTTP-Request ausführen. Das geht mit dem Modul LWP::Simple, siehe dessen Doku.
Cheatah
Hi,
Das ist kein Wunder, weil auf Deinem Filesystem keine ausführbare Datei namens "http://bla/blub?foo=bar" existiert. Du möchtest nichts ausführen, sondern das Ergebnis eines HTTP-Requests erhalten - also einen HTTP-Request ausführen. Das geht mit dem Modul LWP::Simple, siehe dessen Doku.
Hm. Also ich hätte da jetzt einfach eine Weiterleitung per
location: http://example.com/?foo=bar
gemacht, da das erste Script ja beendet werden soll und das Ergebnis von der neuen Seite kommen soll...
cu,
Andreas
Hi,
da das erste Script ja beendet werden soll und das Ergebnis von der neuen Seite kommen soll...
bist Du da sicher? Ich habe das nicht so verstanden...
Cheatah
location: http://example.com/?foo=bar
gemacht, da das erste Script ja beendet werden soll und das Ergebnis von der neuen Seite kommen soll...
cu,
Andreas
location kenn ich nur von JavaScript, nicht von Perl. Aber der Tipp hat mich auf eine andere Idee gebracht. Ich lasse das Script eine HTML-Seite erzeugen, einem meta-refresh im Head, das funktioniert.
<meta http-equiv="refresh" content="0; URL=http://andereurl.xy/cgi-bin/script.cgi?name=$name&pw=$pw">
Danke an alle, die sich die Zeit genommen haben mir zu helfen :)
Hi,
location: http://example.com/?foo=bar
location kenn ich nur von JavaScript, nicht von Perl.
in Perl gibt's das auch nicht, aber in HTTP. "Location" ist der Name eines Headers, welcher bei diversen Statuscodes (die vom Server dadurch generiert werden) benötigt wird.
Aber der Tipp hat mich auf eine andere Idee gebracht. Ich lasse das Script eine HTML-Seite erzeugen, einem meta-refresh im Head, das funktioniert.
Es ist jedoch äußerst suboptimal. Schlechter wäre es nur noch, die Umleitung per JavaScript o.ä. zu machen. Setze einen Location-Header ein; bei Verwendung von CGI.pm geht das sehr einfach über die Methode redirect().
Cheatah