如何在Perl和FastCGI中处理和发送POST请求?

时间:2010-04-18 20:43:27

标签: perl fastcgi http-post

不幸的是,我不熟悉Perl,所以问这里。实际上我正在使用Perl的FCGI。

我需要1.接受POST请求 - > 2.通过POST将其发送到另一个网址 - > 3.得到结果 - > 4.将结果返回到第一个POST请求(4个步骤)。

接受POST请求(步骤1)我使用以下代码(在Internet的某个地方找到):

$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(它是一个字符串)的内容是第一步的结果。现在我需要通过POST请求将$name发送到some_url(步骤2),这会返回另一个结果(步骤3),我必须将其返回到第一个POST请求(步骤4)。

对此的任何帮助将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:3)

要接受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;
}




}

答案 1 :(得分:2)

高度建议您不要尝试自己解决此问题,而是使用现有的库让您的生活变得更轻松。 Perl最好的部分是现有库的大量集合。见http://search.cpan.org/

良好的起点包括CGI.pm或像Catalyst这样的Web框架。

你引用的代码非常错误。巧合的是,只有post by a popular Perl blogger解剖了这个确切的代码。