Konrad: GET oder POST-Aufruf

Hallo,
(wie) kann ich im Perl-Programm abfragen, ob es mit GET oder POST aufgerufen wurde?

  1. Hallo,

    (wie) kann ich im Perl-Programm abfragen, ob es mit GET oder POST aufgerufen wurde?

    Frag die Umgebung:

    $ENV{REQUEST_METHOD}

    falls das Perl-Script ein CGI-Script ist, steht da z.B. "GET" oder "POST" drin.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Hallo,
      Danke Dir!

      1. Moin Konrad,

        guck Dir mal den hash %ENV unter verschiedenen Umgebungen an
        -- reines Perl auf der Kommandozeile
        -- Perl-CGI-Script

          
        #!/usr/bin/perl  
          
        use strict;  
          
        print "Content-type: text/plain\n\n"; # falls CGI  
          
        while( my($k,$v) = each %ENV){  
        	printf("%-25s %s\n", $k, $v);  
        }  
        
        

        da stehen interessante Sachen drin, siehe auch SELFHTML CGI-Umgebungsvariablen. Ich selbst verwende %ENV sehr gerne, weil bestimmte Variablen den Programmieraufwand z.T. erheblich vereinfachen.

        Beispiel in einem CGI
        form action="$ENV{SCRIPT_NAME}"

        Beispiel in einem Kommandozeilenscript
        $ua->env_proxy() if $ENV{HTTP_PROXY};

        Viel Spass dabei,
        Horst Schlemmerschnitte

        1. Hallo,

          guck Dir mal den hash %ENV unter verschiedenen Umgebungen an
          -- reines Perl auf der Kommandozeile
          -- Perl-CGI-Script

          habe ich gemacht und bin dann gleich auf einige Fragen gestoßen.
          HTTP_USER_AGENT liefert einen langen String, bei meinem Mozilla Firefox 2.0.0.20 z.B.
          "Mozilla/5.0(......) Gecko(.....) Firefox/2.0.0.20........"
          Wenn ich jetzt wissen will, ob es irgend eine Version von Mozilla Firefox ist,
          genügt es da, den String auf vorhandenes "Mozilla" oder vorhandenes "Firefox" oder auf beide abzufragen?
          Oder gibt es eine nicht aufgelistete Variable, die mir direkt das in der Browser-Kopfzeile angezeigte "Mozilla Firefox" liefert?
          Und was bedeutet das Gecko in diesem Zusammenhang?
          Oder sind Mozilla, Firefox und Gecko gar drei Browser derselben Familie (mit gleicher Funktionalität)?

          Viele Fragen?
          Gruß
          Konrad

          1. hi,

            Oder sind Mozilla, Firefox und Gecko gar drei Browser derselben Familie (mit gleicher Funktionalität)?

            Da gibts bestimmt irgendwo in den Weiten des Internet gepflegte Seiten, wo das alles steht. Btw., die Angabe UserAgent ist nur als Hinweis zu sehen, das kann im UA (naja, nicht in Jedem) selbst festgelegt werden, als was der sich ausgibt. Genauso die Variable HTTP_REFERER, kann total verbogen sein, muss nicht stimmen.

            Fürs CGI-Programmieren interessante Vars in ENV sind jedoch beispielsweise

            SERVER_NAME
            HTTP_HOST
            DOCUMENT_ROOT
            SCRIPT_NAME
            REQUEST_URI

            um maln paar zu nennen. Und selbstverständlich kannst Du auch eigene Variablen in %ENV ablegen, die sind global. Um Verwechslungen auszuschließen, nehme ich dazu nur Kleinbuchstaben.

            Noch ein Tipp von mir, zu globalen Variablen:

            Sinnnvoll, wenn für einen komplexen Prozess mehrere Funktionen _hintereinander_ aufgerufen werden. Da ist eine globale Variable übersichtlicher als lokale Variablen von einer Funktion über die Andere mitzuschleifen. Beispiel Ausgabe einer HTML-Seite:

            cgiHeader();
            htmlHeader();
            htmlFooter();

            Alle drei brauchen bei mir den Wert für Last-Modified, also tu ich den eigens in $ENV{lastmod} und gut. Das passiert bereits noch vor dem ersten Funktionsaufruf in meinem Basis-Modul. Natürlich könnte ich auch mit

            use vars qw($lastmod);

            dafür eine extra Variable erzeugen, aber wozu, den hash %ENV gibts doch sowieso schon global.

            Bei Funktionsaufrufen aus einer Funktion in eine Subfunktion und zurück in die aufrufende Funktion hingegen sind globale Vars zu vermeiden.

            Hotti