Как может я выполнять CGI:: режим Выполнения приложения из командной строки?

Нажмите для ввода режима редактирования, запускающегося в конце строки.

5
задан brian d foy 16 July 2009 в 23:42
поделиться

5 ответов

После дальнейшего изучения документации CGI :: App и CGI выяснилось, что быть более простым, чем я думал. В простейшем случае (без реальной обработки аргументов или обработки выходных данных вызова run webapp):

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use WebApp;

my $cgi = new CGI( \%{@ARGV} );

my $webapp = WebApp->new( QUERY => $cgi );
$webapp->run();

Для создания CGI требуется просто серия пар значений, разделенных пробелами. Вам нужно передать режим выполнения и все аргументы.

3
ответ дан 13 December 2019 в 05:40
поделиться

The original CGI specification makes it easy to run things from the command line and was fully intended not as a specific HTTP-only interface but something that could handle FTP and gopher as well as new top-level URL schemes. I know what I wanted when I helped specify it.

The spec I referenced should give you all you need, but for the most part it is just a collection of environment variables. If you see a request for:

http://some.server.com/some/path?a=b&c=d

The environment variables come out looking like this:

SERVER_PROTOCOL=http
REQUEST_METHOD=GET
HTTP_HOST=some.server.com
SERVER_PORT=80
PATH_INFO=/some/path
QUERY_INFO=a=b&c=d

To reverse the polarity of that in Perl would go something like this:

$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");

Things get a bit more complicated in handling POST queries and there are more possible environment variables that may be required. Worst case you can enumerate them all with a quick CGI script something like:

print "Content-Type: text/plain\r\n\r\n";
foreach (keys(%ENV))
{
    print "$_=$ENV{$_}\r\n";
}

Now put that on the web server in place of your CGI script and you'll see all the environment that gets passed in (and the original environment so you'll need to make a few judgement calls).

6
ответ дан 13 December 2019 в 05:40
поделиться

Таким образом:

$ perl yourscript.pl  field1=value1 field2=value2

Библиотека Perl CGI позаботится о магии за вас, и похоже, что CGI :: Application полагается на CGI (судя по их примеру кода).

0
ответ дан 13 December 2019 в 05:40
поделиться

Вместо того, чтобы проходить через CGI :: Application каждый раз, когда вы хотите что-то сделать, обеспечьте надлежащее разделение задач , возможно, используя настройку MVC . Все функциональные возможности должны существовать вне CGI :: Application, поскольку они должны работать только как контроллер. После того, как вы отделите эти биты, вы можете легко написать другие контроллеры для других методов ввода.

Не пишите веб-приложение; напишите приложение, у которого есть веб-интерфейс. Когда у вас есть это, вы можете легко предоставить своему приложению другие виды интерфейсов.

0
ответ дан 13 December 2019 в 05:40
поделиться

Вы можете автоматизировать, позвонив веб-приложение с помощью curl, wget или GET-скрипта LWP с соответствующими параметрами. Я использовал аналогичную систему для задач, управляемых cron, с приложением Catalyst.

Это касается всех переменных среды для вас ..

0
ответ дан 13 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: