我有一个第三方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请求中提供数据一样?
答案 0 :(得分:5)
如果第三方脚本是CGI,您可以在命令行上提供参数:
your_script.pl name1=value1&name2=value2
详细了解如何在the CGI.pm documentation中测试POST和GET方法。
答案 1 :(得分:2)
您可以轻松make a real HTTP request进行测试:
use LWP::UserAgent qw();
my $ua = LWP::UserAgent->new;
$ua->post(
'http://localhost:5000',
[
foo => 23,
bar => 42,
]
);
你可以initialise the CGI object from a hashref or a file。
use CGI qw();
my $c = CGI->new({
foo => 23,
bar => 42,
});
首选这些假的HTTP请求!假的,包括1月份答案中的命令行变体,缺少一些属性,例如request_method
。