3

ブラウザで実行するように設計され、HTTP POST リクエストでデータを処理するサード パーティの Perl スクリプトがあります。

スクリプトはコマンド ラインから実行できますが、その場合、予期された環境で実行されないため、必要なユーザー データにアクセスできません。

スクリプトを非常に頻繁に実行する必要があり、代わりにコマンド ラインで処理できるものを処理するために Apache プロセスを起動するオーバーヘッドを回避したいと考えています。このスクリプトは、Apache 経由よりもはるかに高速にコマンド ラインから実行されます (少なくとも入力データなしで)。

コマンド ライン引数が HTTP POST 要求に存在するかのようにスクリプトに渡されるように、スクリプトをまとめたいと思います。

私は Perl にあまり詳しくないので、私が達成しようとしていることを表すために、PHP で (初歩的な) 例を示したいと思います。

<?php

$_POST['example1'] = $argv[1];
$_POST['example2'] = $argv[2];

include /var/www/thirdPartyScript.php

?>

Perl スクリプトは、次のようにデータにアクセスします。

#!/usr/bin/perl -T

use CGI 3.40 qw(-newstyle_urls -private_tempfiles redirect);
# ...
my $q = CGI->new();
# ...
if ($q->param('example1') {

} else {

}


HTTP POST リクエストでデータが提供されたかのように、サードパーティのスクリプトが関連データにアクセスできるようにするには、ラッパー スクリプトで何を設定する必要がありますか?

4

2 に答える 2

5

サード パーティのスクリプトが CGI の場合、コマンド ラインでパラメータを指定できます。

your_script.pl name1=value1&name2=value2

POST および GET メソッドをテストする方法の詳細については、CGI.pm のドキュメントを参照してください。

于 2012-10-18T07:18:57.913 に答える
2

テスト目的で実際の HTTP リクエストを簡単に作成できます。

use LWP::UserAgent qw();
my $ua = LWP::UserAgent->new;
$ua->post(
    'http://localhost:5000',
    [
        foo => 23,
        bar => 42,
    ]
);

hashref または file から CGI オブジェクトを初期化できます。

use CGI qw();
my $c = CGI->new({
    foo => 23,
    bar => 42,
});

これらの偽の HTTP リクエストよりも本物の HTTP リクエストを優先してください! 1 月の回答のコマンドライン バリアントを含む偽物には、いくつかのプロパティがありませんrequest_method

于 2012-10-18T10:35:47.943 に答える