php curl не получает данные из API YouTube

Возможный дубликат:
Php - отладка Curl

Я использую curl для получения пользовательских данных из API YouTube. Код

    $url_userInfo =  'https://gdata.youtube.com/feeds/api/users/default?access_token=ya29.AHES6ZS7GMdZf91LbMtoOdhFSFOpTuHHT-t7pSggAp-tS0A;

print_r($url_userInfo);
$ch = curl_init($url_userInfo);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, '3');
$content = curl_exec($ch);
curl_close($ch);
print_r( $content);

Если я вручную посещаю этот URL-адрес, он отображает данные в форме xml. но в $content печатать нечего.

Есть ли проблема с кодом ??


person Muhammad Usman    schedule 18.12.2012    source источник
comment
Невозможно воспроизвести: * Примечание: неопределенная переменная: ytAccessToken - предоставьте только рабочие примеры, например предоставить учетные данные для тестирования или демонстрации.   -  person hakre    schedule 18.12.2012
comment
теперь попробуй. это будет работать в течение часа   -  person Muhammad Usman    schedule 18.12.2012
comment
Я пробовал, нужно только устранить неполадку. Это тривиально, см. Связанный вопрос. Пожалуйста, сделайте свою домашнюю работу, прежде чем размещать новый вопрос, и всегда добавляйте отладочную информацию, если вы столкнетесь с проблемой. Также см. Какие шаги вы предпринимаете для устранения неполадок Проблемы с PHP cURL?   -  person hakre    schedule 18.12.2012
comment
Вы можете не получать доступ к защищенным SSL сайтам с cURL по умолчанию, вы должны использовать для этого список доверенных сертификатов, см. Это статья по этой теме.   -  person adeneo    schedule 18.12.2012


Ответы (1)


На самом деле это ссылка HTTPS, т. Е. Использует SSL, и вам нужно получить cacert.pem и настроить cURL для SSL, чтобы это работало.

Вы можете получить сертификат здесь!

и вы бы настроили его так:

$curl = curl_init();
$browser = $_SERVER['HTTP_USER_AGENT'];
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: ";
curl_setopt($curl, CURLOPT_FAILONERROR,true);
curl_setopt($curl, CURLOPT_USERAGENT, $browser);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($curl, CURLOPT_AUTOREFERER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl, CURLOPT_TIMEOUT, 20);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); //needed for SSL
curl_setopt($curl, CURLOPT_CAINFO, "/scripts/cacert.pem"); //path to file
curl_setopt($curl, CURLOPT_URL, $url_userInfo);
$content = curl_exec($curl);
echo curl_error($curl);  //display errors under development
curl_close($ch);
print_r( $content );

Использование подходящего пользовательского агента и аутентификация с помощью SSL и сертификата, как это сделал бы браузер.

person adeneo    schedule 18.12.2012
comment
@RanaMuhammadUsman - Я добавил оператор echo error, попробуйте его и посмотрите, какие есть ошибки. Вы загрузили сертификат и разместили его на сервере, указав правильный путь и т. Д. - person adeneo; 18.12.2012
comment
Попробуйте увеличить CONNECTTIMEOUT, сейчас это 2 секунды, чего должно быть достаточно, поскольку более 2 секунд для установления соединения обычно означает, что URL-адрес неверен, но попробуйте увеличить это число до 20 секунд и посмотрите, подключается он или нет. - person adeneo; 18.12.2012
comment
Если вы печатаете его в браузере, вам, вероятно, придется использовать исходный код, чтобы увидеть теги и т. Д. - person adeneo; 18.12.2012