GET oder POST-Aufruf
Konrad
- perl
1 hotti
Hallo,
(wie) kann ich im Perl-Programm abfragen, ob es mit GET oder POST aufgerufen wurde?
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
Hallo,
Danke Dir!
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
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
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