Как получить параметры строки запроса из запроса POST в Perl-скрипте CGI? - PullRequest
0 голосов
/ 11 декабря 2018

Вы можете получить параметр запроса в CGI-скрипте с помощью этого кода:

#!C:\Perl64\bin\perl.exe

use CGI;

my $cgi = CGI->new();

my $file = $cgi->param( "file" );
print "Content-Type: text/plain\n\n";

my $text = do {
    open(my $f, "<:encoding(UTF-8)", $file)
      or die("Can't open \$filename\": $!\n");
    local $/;
    <$f>
};

print $text;

, но это не работает, если запрос POST, я отправляю этот запрос, используя API выборки:

await fetch('cgi-bin/script.pl?file=..\foo.php', {
   method: 'POST',
   body: 'Some Text'
}).then(r => r.text());

если я открою скрипт в браузере, я получу содержимое файла.Есть ли способ сказать модулю CGI получать параметры из QueryString вместо данных POST?или любой другой простой способ анализа строки запроса без модуля CGI в Perl?

1 Ответ

0 голосов
/ 11 декабря 2018

Кажется странным делать запрос POST со всеми данными в URL.Почему бы просто не сделать GET?

Но, в любом случае, CGI.pm вас покроет.В документации есть раздел под названием Смешивание параметров post и url , в котором говорится следующее:

my $color = url_param('color');

Возможно, что скрипт может получить CGIпараметры в URL-адресе, а также в заполненной форме путем создания формы, которая отправляет в URL-адрес, содержащий строку запроса (после знака «?» следуют аргументы).Метод param () всегда возвращает содержимое заполненной формы POSTed, игнорируя строку запроса URL.Чтобы получить параметры URL, вызовите метод url_param ().Используйте его так же, как param ().Основное отличие состоит в том, что он позволяет читать параметры, но не устанавливать их.

...