You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

file_get_contents()读取YouTube视频信息失效,请求协助排查原因

问题分析与解决方案

这种情况我碰到过很多次,大概率是YouTube的反爬策略更新导致的——毕竟他们一直在调整机制来限制非官方工具的访问。咱们一步步来拆解原因和解决办法:

核心原因

你之前的代码失效,主要是这几个关键点:

  • YouTube现在会严格校验请求的User-Agent标识,file_get_contents默认发送的请求没有模拟浏览器的UA头,会被直接拦截返回空内容
  • 原代码用的是HTTP协议,现在YouTube会强制将HTTP请求重定向到HTTPS,而file_get_contents默认不自动跟随重定向
  • 部分服务器可能禁用了allow_url_fopen配置,导致无法远程获取内容

修复方案

方案1:给file_get_contents添加请求头并启用重定向

修改代码,通过stream_context_create模拟浏览器请求,同时开启重定向支持:

$vid = 'WwVZBfMlNPA';
// 改用HTTPS协议
$vurl = 'https://youtube.com/get_video_info?video_id=' . $vid;

// 模拟Chrome浏览器的请求头
$context = stream_context_create([
    'http' => [
        'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\r\n",
        'follow_location' => 1 // 自动跟随重定向
    ]
]);

$contents = file_get_contents($vurl, false, $context);
var_dump($contents);
parse_str($contents, $info);

方案2:改用cURL(更稳定可靠)

如果服务器禁用了allow_url_fopen,或者需要更复杂的请求控制,cURL是更好的选择:

$vid = 'WwVZBfMlNPA';
$vurl = 'https://youtube.com/get_video_info?video_id=' . $vid;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $vurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 模拟浏览器UA
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');
// 跟随重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// 禁用SSL证书校验(如果服务器有证书问题)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$contents = curl_exec($ch);
curl_close($ch);

var_dump($contents);
parse_str($contents, $info);

补充说明

  • 即使修复后,这个非公开接口未来可能还会失效,因为YouTube一直在调整反爬规则,官方并不推荐使用这类非正规途径
  • 如果需要长期稳定获取视频信息,建议使用YouTube Data API,这是官方提供的合法合规途径

内容的提问来源于stack exchange,提问作者Nick Buck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:48:22