无法让curl_init()与动态生成的网址

时间:2017-01-02 15:52:09

标签: php curl

我正在编写一个PHP脚本来检索远程网站上的音频文件。脚本如下:

<?php
require_once 'table_access/simplehtmldom_1_5/simple_html_dom.php';
function getsound($wrd){
    $html = file_get_html('http://www.spanishdict.com/translate/' . rawurlencode($wrd));
    $colentry = $html->find('div.source');
    if($colentry != null){
        $ahref = $colentry[0]->find('a.audio-start');
        $audiolink = trim($ahref[0]->getAttribute('href'));

        $testval = 'http://audio1.spanishdict.com/audio?lang=es&text=hombre&key=84be08a91b32dc61e45f8f78970b206b';
        echo '<p> T: ' . $testval . '</p>';
        echo '<p> A: ' . $audiolink . '</p>';
        // $testval = $audiolink;
        $ch = curl_init($audiolink);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_NOBODY, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        $output = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        if ($status == 200) { file_put_contents(dirname(__FILE__) . '/audiotest.mp3', $output); }
        else { echo $status; }

        return($audiolink);
    }
}

echo '<p>' . getsound('hombre') . '</p>';
?>

我使用simple html DOM script来抓取远程访问的页面。出于测试目的,我将URL分配给两个不同的变量:

  • $ audiolink :这个是在被抓取的页面上动态生成的。
  • $ testval:这是一个非动态变量,手动为其分配了示例网址。

我正在使用的测试用例为 echo()命令的输出中显示的任一变量返回完全相同的值。但是,仅当我将 $ testval (硬编码值)传递给 curl_init()函数时才会下载目标文件。如果我传递 $ audiolink (动态生成的值),脚本运行时没有任何错误但无法下载文件。我重复测试运行中的任一变量中的值都是相同的。

我有什么可以忽略的吗?如上所述,脚本在传递 $ audiolink 时不会抛出任何错误; error.log 文件为空。

更新:只需 echo()了解状态代码,当我使用 $ audiolink <时,结果为400 / strong>和200,当我使用 $ testval 时。

1 个答案:

答案 0 :(得分:2)

也许是编码问题:

http://audio1.spanishdict.com/audio?lang=es&text=hombre&key=84be08a91b32dc61e45f8f78970b206b

VS

http://audio1.spanishdict.com/audio?lang=es&amp;text=hombre&amp;key=84be08a91b32dc61e45f8f78970b206b

尝试编码&amp;和?正确的,也许htmlspecialchars_decode会有所帮助