Есть ли проблемы с обработкой POST-запроса как GET-запроса на сервере? - PullRequest
0 голосов
/ 07 декабря 2009

В попытке решить проблему я разместил в этом вопросе:

Можно ли отправить параметры POST в CGI-скрипт с помощью вызова system ()?

Пока единственное успешное решение проблемы - обмануть окружение, чтобы считать запрос GET. Я делаю это путем преобразования параметров POST в строку запроса, сохраняя эту строку в переменной среды по умолчанию, а затем изменяя переменную среды, которая сообщает серверу, какой метод использует этот запрос, на GET.

$ENV{'QUERY_STRING'} = $long_parameter_string . '&' . $ENV{'QUERY_STRING'};
$ENV{'REQUEST_METHOD'} = 'GET';

system {$perl_exec} $cgi_script;

По сути, я обманываю модуль CGI для чтения из переменной среды QUERY_STRING вместо STDIN, с которой он будет пытаться читать запросы POST.

Этот метод, кажется, работает до сих пор, но я беспокоюсь о непреднамеренных последствиях.

Мой вопрос: видите ли вы какие-либо потенциальные проблемы с этим?

Ответы [ 2 ]

2 голосов
/ 07 декабря 2009

POST и GET означают совершенно разные вещи, и вам не следует ничего "тестировать" таким образом.

Вместо этого вы должны сделать реальный POST для намеченного URL с помощью Perl's LWP .

use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
$ua = LWP::UserAgent->new;

my $req = POST 'http://www.perl.com/cgi-bin/BugGlimpse',
              [ param1 => 'arbitrarily long blob', param2 => 'whatever' ];

print $ua->request($req)->as_string;
1 голос
/ 07 декабря 2009

Вы столкнетесь с проблемами при более крупном представлении и загрузке файлов, так как ограничение размера для GET намного меньше, чем POST. Если вы говорите о предсказуемо небольших объемах данных, с вами все будет в порядке.

...