3

残念ながら、私は Perl に詳しくないので、ここで質問します。実際、私は Perl で FCGI を使用しています。

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) に返される必要があります。

これについての助けをいただければ幸いです。

ありがとうございました。

4

2 に答える 2

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;
}




}
于 2010-04-18T20:58:56.410 に答える
2

この問題を自分で解決しようとするのではなく、既存のライブラリを使用して生活をより簡単にすることを強くお勧めします。Perl の最も優れた点は、既存のライブラリの膨大なコレクションです。http://search.cpan.org/を参照

CGI.pm や Catalyst のような Web フレームワークから始めるのがよいでしょう。

あなたが引用したコードは非常にバグがあります。偶然にも、人気の Perl ブロガーがこの正確なコードを分析した投稿がありました。

于 2010-04-18T21:02:11.347 に答える