【问题标题】:How do I handle and send POST requests in Perl and FastCGI?如何在 Perl 和 FastCGI 中处理和发送 POST 请求?
【发布时间】:2010-04-18 20:43:26
【问题描述】:

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

我需要 1. 接受 POST 请求 -> 2. 通过 POST 将其发送到另一个 url -> 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)。

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

谢谢。

【问题讨论】:

    标签: perl fastcgi http-post


    【解决方案1】:

    要接受 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】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多