Как обрабатывать и отправлять POST-запросы в Perl и FastCGI? - PullRequest
3 голосов
/ 19 апреля 2010

К сожалению, я не знаком с Perl, поэтому спрашиваю здесь. На самом деле я использую FCGI с Perl.

Мне нужно 1. принять запрос POST -> 2. отправить его через POST на другой URL -> 3. получить результаты -> 4. вернуть результаты в первый запрос POST (4 шага).

Чтобы принять запрос POST (шаг 1), я использую следующий код (нашел его где-то в Интернете):

$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
    print ("some error");
}

@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%(..)/pack("C", hex($1))/eg;
    $FORM{$name} = $value;  
}

Содержимое $name (это строка) является результатом первого шага. Теперь мне нужно отправить $name через POST-запрос some_url (шаг 2), который возвращает мне другой результат (шаг 3), который я должен вернуть в результате самого первого запроса POST (шаг 4).

Любая помощь с этим будет принята с благодарностью.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 19 апреля 2010

Чтобы принять POST, вы можете использовать показанный вручную код, но самый лучший способ - использовать CGI (который теперь является основным модулем, поэтому он ваш дистрибутив Perl). Для передачи POST куда-либо, вы можете использовать LWP :: UserAgent

#/usr/bin/perl
use strict;
use warnings;
use CGI;
use LWP::UserAgent;

my $cgi = CGI->new;   # Will process post upon instantiation
my %params = $cgi->Vars;
my $ua = LWP::UserAgent->new;
my $postTo = 'http://www.somewhere.com/path/to/script';
my $response = $ua->post($postTo, %params);

if ($response->is_success) {
    print $response->decoded_content;  # or maybe $response->content in your case
} else {
 die $response->status_line;
}




}
2 голосов
/ 19 апреля 2010

Я очень рекомендуем вам не пытаться решить эту проблему самостоятельно, а вместо этого использовать существующие библиотеки, чтобы сделать вашу жизнь НАМНОГО проще.Лучшая часть Perl - это огромная коллекция существующих библиотек.См. http://search.cpan.org/

Хорошие стартовые места включают CGI.pm или веб-фреймворк, например Catalyst.

Код, который вы цитировали, очень глючный.По совпадению, это был просто пост от популярного Perl-блоггера , рассекающий этот точный код.

...