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

PHP调用YouTube API获取MP4链接本地正常主机失效问题求助

问题:本地正常的YouTube API获取MP4代码,上传主机后返回“此内容不可用”

我用PHP通过YouTube API获取视频MP4链接,本地服务器运行正常,能成功拿到MP4链接;但上传到主机后,API返回的MP4文件显示“此内容不可用”。

错误截图:
错误截图

使用的PHP代码:

<?php

function getVideoInfo($video_id){

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'https://www.youtube.com/youtubei/v1/player?key=[key]');

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    curl_setopt($ch, CURLOPT_POST, 1);

    curl_setopt($ch, CURLOPT_POSTFIELDS, '{  "context": {    "client": {      "hl": "en",      "clientName": "WEB",      "clientVersion": "2.20210721.00.00",      "clientFormFactor": "UNKNOWN_FORM_FACTOR",   "clientScreen": "WATCH",      "mainAppWebInfo": {        "graftUrl": "/watch?v='.$video_id.'",           }    },    "user": {      "lockedSafetyMode": false    },    "request": {      "useSsl": true,      "internalExperimentFlags": [],      "consistencyTokenJars": []    }  },  "videoId": "'.$video_id.'",  "playbackContext": {    "contentPlaybackContext": {        "vis": 0,      "splay": false,      "autoCaptionsDefaultOn": false,      "autonavState": "STATE_NONE",      "html5Preference": "HTML5_PREF_WANTS",      "lactMilliseconds": "-1"    }  },  "racyCheckOk": false,  "contentCheckOk": true}');

    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $headers = array();

    $headers[] = 'Content-Type: application/json';

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);

    if (curl_errno($ch)) {

        echo 'Error:' . curl_error($ch);

    }

    curl_close($ch);

    return $result;

}

print_r(getVideoInfo("[video_id]"));

相同代码为何在本地与主机表现不同?该如何解决此问题?


可能的原因及解决办法

1. 主机IP被YouTube限制

YouTube会对高频请求或异常IP进行访问限制,主机服务器的IP可能因同服务器其他用户滥用、请求量过大被标记,导致API返回内容不可用。

  • 解决:
    • 给请求添加真实浏览器的User-Agent头,模拟正常访问:在$headers数组中添加$headers[] = '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';
    • 控制请求频率,避免短时间内多次调用API
    • 尝试更换主机IP(如使用代理IP)

2. API密钥的IP白名单限制

你的Google API密钥可能设置了IP白名单,仅允许本地IP访问,主机的公网IP不在允许范围内。

  • 解决:
    • 登录Google Cloud控制台,找到对应的YouTube Data API密钥
    • 进入密钥设置页面,在「IP限制」中添加主机的公网IP
    • 确认YouTube Data API v3已在控制台中启用

3. 请求参数版本过时

代码中使用的clientVersion是2021年的旧版本,YouTube的API可能已更新客户端版本要求,本地环境因缓存或兼容机制正常运行,主机环境则被拒绝。

  • 解决:
    • 打开YouTube官网,按F12进入开发者工具,切换到「网络」标签
    • 找到向youtubei/v1/player发送的POST请求,查看请求体中的clientVersion值,替换代码中的旧版本号
    • 同步检查context.client中的其他参数(如clientName)是否符合当前API的要求

4. 主机CURL配置限制

主机服务器的PHP-CURL可能禁用了某些功能,或无法处理gzip/deflate编码,导致请求解析失败。

  • 解决:
    • 尝试移除CURLOPT_ENCODING设置,或仅保留gzip编码:curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
    • 联系主机服务商,确认服务器是否允许访问YouTube的API域名,是否有防火墙拦截
    • 检查主机的PHP配置,确保CURL扩展正常启用,且相关选项未被禁用

内容的提问来源于stack exchange,提问作者Enes Akarsu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:55