Markus: Script aufrufen und Variablen übergeben

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"
    }

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.

Bin für jeden Tipp dankbar.

Gruß
Markus

  1. 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

    1. 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

      1. 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

        1. 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

  2. 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

    1. 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

      1. 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

      2. 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 :)

        1. 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

          --
          X-Will-Answer-Email: No