我正在尝试从用Perl编写的AGI脚本下载MP3文件,但是文件没有下载。奇怪的是,如果我尝试从普通的Perl脚本下载相同的文件,它就会被下载。
这是我的AGI代码:
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
$AGI->answer();
sub getAudioFile
{
$filename = shift;
open(FH, ">./audio.mp3") || die "error";
binmode(FH);
$AGI->verbose("Downloading audio file");
$http_query = "curl http://www.something.com/cgi-bin/downloadfile.cgi? -d \"type=mp3&filename=$filename\" -s |";
open (PIPER, $http_query) or die "sorry";
$rets = "";
while (<PIPER>)
{
$rets .= $_;
}
close(PIPER);
chomp $rets;
print FH $rets;
close(FH);
$AGI->verbose("Download complete");
}
getAudioFile('somefile.mp3');
$AGI->hangup();
这里可能出现什么问题?
答案 0 :(得分:0)
此行失败:
$AGI->answer();
检查代码中的返回值。
来自Asterisk::AGI - Simple Asterisk Gateway Interface Class:
$ AGI-&GT;答案()
执行AGI命令“ANSWER”
如果尚未进入,则回答频道 回答状态
示例:$ AGI-&gt; answer();
返回:通道故障时返回-1,或0 如果成功
答案 1 :(得分:0)
尝试运行perl脚本的“getAudioFile”部分作为“Asterisk”用户(无论运行星号)。这将更接近地模仿Asterisk生成API时发生的事情。
可能是用户权限错误。