0

This question is similar to: Freebase API call works in browser but fails with curl but no answers there.

I have this URL that works in the browser:

https://www.googleapis.com/freebase/v1/search?query=Cee+Lo+Green&filter=%28all+type%3A%2Fmusic%2Fartist+created%3A%22The+Lady+Killer%22%29&limit=10&key=my_key_here

Returns:

{"status":"200 OK","result":[{"mid":"/m/01w5jwb","id":"/en/cee_lo_1974","name":"Cee Lo Green","notable":{"name":"Singer-songwriter","id":"/m/016z4k"},"lang":"en","score":814.733643}],"cost":6,"hits":2}

However, in PHP, the following code doesn't work:

<?php 
namespace com\voting;

class Freebase{

    public function query(){
        $service_url = 'https://www.googleapis.com/freebase/v1/search';  
        $params = array(
                'query' => 'Cee Lo Green',
                'filter' => '(all type:/music/artist created:"The Lady Killer")', 
                'limit' => 10,
                'key' => API_KEY  );
        $url = $service_url . '?' . http_build_query($params);
        $ch = curl_init();  
        curl_setopt($ch, CURLOPT_VERBOSE, true);
        curl_setopt($ch, CURLOPT_URL, $url);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $response = json_decode(curl_exec($ch), true);
        curl_close($ch);
        return $response;
    }
}
?>

A dump of curl, gives this:

array (size=22)
  'url' => string 'https://www.googleapis.com/freebase/v1/search?query=Cee+Lo+Green&filter=%28all+type%3A%2Fmusic%2Fartist+created%3A%22The+Lady+Killer%22%29&limit=10&key=my_key_here' (length=191)
  'content_type' => null
  'http_code' => int 0
  'header_size' => int 0
  'request_size' => int 0
  'filetime' => int -1
  'ssl_verify_result' => int 0
  'redirect_count' => int 0
  'total_time' => float 0.047
  'namelookup_time' => float 0
  'connect_time' => float 0.063
  'pretransfer_time' => float 0
  'size_upload' => float 0
  'size_download' => float 0
  'speed_download' => float 0
  'speed_upload' => float 0
  'download_content_length' => float -1
  'upload_content_length' => float -1
  'starttransfer_time' => float 0
  'redirect_time' => float 0
  'certinfo' => 
    array (size=0)
      empty
  'redirect_url' => string '' (length=0)

I thought maybe a connectivity issue, but I tried a regular http URL and curl showed that it was able to get the content of the page.

Update 1

I should have done my homework before posting. With Wireshark, I can see the following text:

Alert Message Level: Fatal (2) Description: Unknown CA (48)

Is my setup improperly configured?

Community
  • 1
  • 1
TechFanDan
  • 3,329
  • 6
  • 46
  • 89

2 Answers2

1

Thanks, in just a script:

<?php 


        $service_url = 'https://www.googleapis.com/freebase/v1/search';  
        $params = array(
                'query' => 'Cee Lo Green',
                'filter' => '(all type:/music/artist created:"The Lady Killer")', 
                'limit' => 10,
                'key' => API_KEY  );
        $url = $service_url . '?' . http_build_query($params);
        $ch = curl_init();  
        curl_setopt($ch, CURLOPT_VERBOSE, true);
        curl_setopt($ch, CURLOPT_URL, $url);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //WARNING: this would prevent curl from detecting a 'man in the middle' attack
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
        $response = json_decode(curl_exec($ch), true);
        curl_close($ch);
        return $response;

?>
0

This answer solved it for me: HTTPS and SSL3_GET_SERVER_CERTIFICATE:certificate verify failed, CA is OK

Final solution:

<?php 
namespace com\voting;

class Freebase{

    public function query(){
        $service_url = 'https://www.googleapis.com/freebase/v1/search';  
        $params = array(
                'query' => 'Cee Lo Green',
                'filter' => '(all type:/music/artist created:"The Lady Killer")', 
                'limit' => 10,
                'key' => API_KEY  );
        $url = $service_url . '?' . http_build_query($params);
        $ch = curl_init();  
        curl_setopt($ch, CURLOPT_VERBOSE, true);
        curl_setopt($ch, CURLOPT_URL, $url);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //WARNING: this would prevent curl from detecting a 'man in the middle' attack
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
        $response = json_decode(curl_exec($ch), true);
        curl_close($ch);
        return $response;
    }
}
?>
Community
  • 1
  • 1
TechFanDan
  • 3,329
  • 6
  • 46
  • 89