Freebase API调用在浏览器中有效但在curl时失败

时间:2013-03-06 14:33:21

标签: php json curl freebase

我正在尝试从Freebase API接收数据。我手动构建了一个有效的API调用,它在我的浏览器中给了我一个有效的JSON响应。所以我写了一个PHP函数,应该完全这样做:

$service_url = 'https://www.googleapis.com/freebase/v1/search';
$params = array(
           'filter' => '(all name:"Avatar")',
           'lang' => 'en',
           'type' => 'film/film',
           'key' => Configure::read('Api.Key')
         );
$url = $service_url . '?' . http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

我得到的回复是NULL,但如果我将构建的网址输入我的Chrome REST插件或直接在浏览器中查看,我会得到有效的回复。如果url有效,为什么我的curl函数会失败?

2 个答案:

答案 0 :(得分:1)

对我来说,添加以下工作线。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

答案 1 :(得分:0)

我的猜测是您看到NULL因为curl_exec返回false,然后json_decode会将false转换为NULL

这意味着,正如您所怀疑的,curl_exec失败了。我不确定原因,但我会首先使用curl_error()curl_errno()进行调试,以获取有关导致curl失败的原因的更多信息。

参考:curl_exec() always returns false