【问题标题】:Freebase API call works in browser but fails with curlFreebase API 调用在浏览器中有效,但 curl 失败
【发布时间】:2013-03-06 14:33:21
【问题描述】:

我正在尝试从 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,但是如果我将构建的 URL 输入到我的 Chrome REST 插件中或直接在浏览器中查看它,我会得到一个有效的响应。如果url有效,为什么我的curl函数会失败?

【问题讨论】:

  • 如果您只包含内联的键,例如:'key' => 'XXX-XXX-XXX',这是否有效?我刚试过,它对我有用。
  • 在 curl_exec 调用之后你检查过 curl_error($ch) 的输出吗?

标签: php json curl freebase


【解决方案1】:

对我来说,添加以下行是有效的。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

【讨论】:

    【解决方案2】:

    我猜你看到的是NULL,因为curl_exec 返回false,然后json_decodefalse 转换为NULL

    这意味着,正如您所怀疑的,curl_exec 失败了。我不知道为什么,但我会从调试 curl_error()curl_errno() 开始,以获取有关导致 curl 失败的更多信息。

    参考:curl_exec() always returns false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 2019-03-20
      • 2013-06-09
      • 2016-02-07
      • 2021-09-19
      • 2020-05-07
      • 1970-01-01
      相关资源
      最近更新 更多