2013-05-31 9 views
0

Этот вопрос похож на: Freebase API call works in browser but fails with curl, но ответов нет.API Freebase работает в браузере, но не в PHP

Я это URL, который работает в браузере:

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 

возвратов:

{"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} 

Однако в PHP, следующий код не работает:

<?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; 
    } 
} 
?> 

Свалка завитка, дает следующее:

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) 

Я думал, что проблема связана с подключением, но я попробовал обычный URL-адрес http, и завиток показал, что он смог получить содержимое страницы.

Update 1

я должен был сделать свою домашнюю работу, прежде чем отправлять. С Wireshark, я могу увидеть следующий текст:

Предупреждение Сообщение Уровень: Fatal (2) Описание: Неизвестный CA (48)

моя установка неправильно настроен?

ответ

0

Этот ответ решил это для меня: HTTPS and SSL3_GET_SERVER_CERTIFICATE:certificate verify failed, CA is OK

Окончательное решение:

<?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; 
    } 
} 
?> 
1

Спасибо, всего сценария:

<?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; 

?> 
Смежные вопросы