Как я могу прочитать URL-данные, отправленные с POST в Perl? - PullRequest
0 голосов
/ 14 декабря 2009

Я пытаюсь зачитать POST-данные, которые были отправлены из формы на странице в мой Perl Script. Я погуглил и обнаружил, что:

read(STDIN, $param_string, $ENV{'CONTENT_LENGTH'})

считывает всю строку данных с помощью и записывает всю строку в $ param_string в виде

Param1=Value1&Param2=Value2&Param3=Value3

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

Но мне интересно, почему моя $ param_string пуста.

Когда я попробую все это с GET:

$param_string = $ENV{'QUERY_STRING'};

все отлично работает. У кого-нибудь есть идея?

Ответы [ 3 ]

12 голосов
/ 14 декабря 2009

Нет абсолютно никакой реальной причины для того, чтобы кто-то на вашем уровне захотел разобрать запросы CGI.

Пожалуйста, используйте CGI :: Simple или CGI.pm .

CGI.pm имеет много багажа (генерация HTML, функционально-ориентированный интерфейс), что делает CGI :: Simple предпочтительным.

Лучше использовать любой модуль обработки CGI в CPAN, чем пытаться писать код обработки CGI с нуля.

См. parse_query_string в CGI::Simple, чтобы узнать, как получить доступ к параметрам, переданным с использованием строки запроса, при обработке формы, помещенной в ваш сценарий.

Если вы хотите научиться делать это правильно, вы можете прочитать исходный код любого модуля. Чтение файла CGI.pm CHANGES также полезно.

0 голосов
/ 03 ноября 2016

Если вы можете получить GET-данные, но не можете получить POST-данные, скорее всего, вы забыли изменить метод формы с поста. Вы можете проверить свой метод отправки, используя это условие в условии if:

if ($ENV{'REQUEST_METHOD'} eq "POST"){
   read(STDIN, $param_string, $ENV{'CONTENT_LENGTH'});
}else {
   $param_string = $ENV{'QUERY_STRING'};
}
0 голосов
/ 15 декабря 2009

Под mod_perl 2, Apache2 :: Request у меня работает.

...