Как обрабатывать и отправлять запросы POST в Perl и FastCGI?

К сожалению, я не знаком с 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).

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

Спасибо.


person Peterim    schedule 18.04.2010    source источник


Ответы (2)


Чтобы принять 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;
}




}
person Tony Miller    schedule 18.04.2010

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

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

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

person Chris Dolan    schedule 18.04.2010