php curl没有从youtube API获取数据[重复]

Posted

技术标签:

【中文标题】php curl没有从youtube API获取数据[重复]【英文标题】:php curl is not fetching the data from youtube API [duplicate] 【发布时间】:2012-12-05 12:47:57 【问题描述】:

可能重复:php - Debugging Curl

我正在使用 curl 从 youtube API 获取用户数据 代码是

    $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 中没有可打印的内容。

代码有问题吗?

【问题讨论】:

无法重现:*"注意:未定义变量:ytAccessToken" - 请仅提供工作示例,例如提供测试或演示凭据。 现在试试。它会工作一个小时 我试过了,你只需要解决它。这很简单,请参阅链接的问题。请在发布新问题之前做好功课,如果遇到问题,请务必添加调试信息。另请参阅What Steps do you Take to Troubleshoot Problems with PHP cURL? 您可以默认使用 cURL 访问受 SSL 保护的站点,您应该使用受信任的证书列表来执行此操作,请参阅此主题 article。 【参考方案1】:

这实际上是一个 HTTPS 链接,即它使用 SSL,您需要获取 cacert.pem,并为 SSL 设置 cURL 以使其工作。

您可以获得证书here!

你可以这样设置:

$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 和证书进行身份验证,就像浏览器一样。

【讨论】:

@RanaMuhammadUsman - 我添加了一个echo error 声明,试试看有什么错误。您是否下载了证书并将其放置在具有正确路径等的服务器上? 尝试增加CONNECTTIMEOUT,现在是2秒,应该足够了,因为建立连接的时间超过2秒通常意味着URL不正确,但尝试增加这个数字到20秒,看看它是否连接。 如果您将其打印到浏览器,您可能必须使用“查看源代码”来查看标签等。

以上是关于php curl没有从youtube API获取数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 使用php从Youtube api获取观看次数

php 从API的视频ID获取YouTube视频标题

如何使用php和API从url获取youtube视频的缩略图

如何解决 youtube data api V3 中的 curl 错误 60:ssl 证书问题?

有没有更好的方法来使用 Youtube PHP API

使用 php curl 对 paypal api 没有响应