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和API从url获取youtube视频的缩略图