3

我有一个第三方 Perl 脚本,旨在由浏览器执行并处理 HTTP POST 请求中的数据。

该脚本可以从命令行执行,但这样做时它不会在预期的环境中执行,因此无法访问所需的用户数据。

我需要非常频繁地执行脚本,并希望避免启动 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

请参阅CGI.pm 文档中有关如何测试 POST 和 GET 方法的更多详细信息。

于 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 或文件初始化 CGI 对象

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

比起这些虚假的请求,更喜欢真正的 HTTP 请求!假的,包括一月份答案中的命令行变体,缺少一些属性,例如request_method.

于 2012-10-18T10:35:47.943 回答