1

我正在使用谷歌文本到语音 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 超时连接。

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

谁能解释为什么会发生这种情况?

谢谢。

4

2 回答 2

1

这是由于谷歌解析机器人的方式。您需要欺骗 User-Agent 标头来伪装成一台计算机。

有关如何解决此问题的一些信息将在此处:

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

于 2013-08-01T20:58:15.273 回答
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); 
于 2013-08-02T17:01:58.803 回答