0

我正在尝试从用 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();

这里可能出了什么问题?

4

2 回答 2

0

尝试以“Asterisk”用户的身份运行 perl 脚本的“getAudioFile”部分(无论运行的是什么星号)。这将更接近地模拟 Asterisk 生成 API 时发生的情况。

也许这是一个用户权限错误。

于 2009-10-22T16:20:23.577 回答
0

此行失败:

$AGI->answer(); 

检查代码中的返回值。

来自Asterisk::AGI - 简单的 Asterisk 网关接口类

$AGI->答案()

执行 AGI 命令“ANSWER”

如果尚未处于应答状态,则应答通道

示例:$AGI->answer();

返回:-1 表示通道失败,或 0 表示成功

于 2009-09-28T23:03:05.057 回答