file_get_contents(和wget)非常慢

时间:2013-08-01 20:40:04

标签: php linux performance wget

我正在使用谷歌文本语音API,但由于某些原因,当我通过php或命令行连接到它时,它真的很慢。

我这样做:

$this->mp3data = file_get_contents("http://translate.google.com/translate_tts?tl=en&q={$text}");  

其中$ text只是一个urlencoded字符串。

我也尝试过在命令行上使用wget:

wget http://translate.google.com/translate_tts?tl=en&q=test

无论哪种方式大约需要20秒或更长时间。通过php,它最终会获取内容并将其添加到我想要的服务器上的新文件中。通过wget,它可以连接出来。

但是,如果我只是在浏览器中访问该网址,那几乎是即时的。

有人能否解释为何会出现这种情况?

感谢。

2 个答案:

答案 0 :(得分:1)

这是由于谷歌如何分析机器人。您需要欺骗User-Agent标头以伪装成计算机。

有关如何解决这个问题的一些信息将在这里:

https://duckduckgo.com/?q=php%20curl%20spoof%20user%20agent

答案 1 :(得分:0)

现在管理好了解决这个问题,这就是我最终做的事情,现在它只需要几秒钟:

$header=array("Content-Type: audio/mpeg"); 
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL, $uri); 
        curl_setopt($ch, CURLOPT_HEADER, false); 
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
        $this->mp3data = curl_exec($ch); 
        curl_close($ch);