不幸的是,我不熟悉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)。
对此的任何帮助将不胜感激。
谢谢。
答案 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解剖了这个确切的代码。