L'originale CGI specification semplifica l'esecuzione di operazioni dalla riga di comando ed è stato concepito non come un'interfaccia specifica solo HTTP ma qualcosa che potrebbe gestire FTP e gopher nonché nuovi schemi URL di primo livello. So cosa volevo quando ho aiutato a specificarlo.
Le specifiche a cui ho fatto riferimento dovrebbero darti tutto ciò di cui hai bisogno, ma per la maggior parte è solo una raccolta di variabili di ambiente. Se si vede una richiesta di:
http://some.server.com/some/path?a=b&c=d
Le variabili di ambiente escono cercando in questo modo:
SERVER_PROTOCOL=http
REQUEST_METHOD=GET
HTTP_HOST=some.server.com
SERVER_PORT=80
PATH_INFO=/some/path
QUERY_INFO=a=b&c=d
Per invertire la polarità che in Perl sarebbe andato qualcosa come questo:
$ENV{'SERVER_PROTOCOL'} = 'http';
$ENV{'REQUEST_METHOD'} = 'GET';
$ENV{'SERVER_PORT'} = 80;
$ENV{'PATH_INFO'} = '/some/path';
$ENV{'QUERY_INFO'} = 'a=b&c=d';
system("perl your-CGI-script.pl");
Le cose diventano un po 'più complicate nella gestione delle interrogazioni POST e ci sono più possibili variabili d'ambiente che possono essere richieste. Nel peggiore dei casi si li può enumerare con un rapido qualcosa di script CGI come:
print "Content-Type: text/plain\r\n\r\n";
foreach (keys(%ENV))
{
print "$_=$ENV{$_}\r\n";
}
Ora mettete che sul server web al posto del tuo script CGI e vedrete tutto l'ambiente che viene passato a (e la ambiente originale quindi dovrai effettuare alcune chiamate di giudizio).
fonte
2009-07-17 00:41:51
È ancora più semplice di così; vedi http://search.cpan.org/perldoc/CGI#DEBUGGING – ysth
Vero, il modulo 'your_script.pl name1 = value1 name2 = value2' funziona per eseguire il file CGI :: App .cgi di base, tuttavia perderò qualsiasi possibilità di controllare l'input, impostare i valori predefiniti ecc. –
Questo esempio verrebbe comunque stampato su STDOUT, incluse le intestazioni HTTP, che non è desiderabile. Inoltre, non è necessario coinvolgere CGI.pm. Semplicemente confonde le cose quando passi ed elabori gli argomenti direttamente dalla riga di comando con uno strumento di elaborazione degli argomenti standard come Getopt :: Long. –