【问题标题】:Youtube Data API v3 - Bad Request - How to find what is wrongYoutube Data API v3 - 错误请求 - 如何找出问题所在
【发布时间】:2025-12-07 09:25:01
【问题描述】:

我想使用 php 根据他们的 id 检索有关 Youtube 视频的信息。

我有我的 API 密钥,我正在尝试这个:

$res = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=snippet&id=<vid-id>&key=<my-key>");
echo $res;

但我收到此警告:

file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet&id=<vid-id>&key=):打开流失败:HTTP 请求失败! HTTP/1.0 400 错误请求

响应头如下所示:

["http_response_header"]=>
  array(10) {
[0]=>
   string(24) "HTTP/1.0 400 Bad Request"
[1]=>
   string(45) "Content-Type: application/json; charset=UTF-8"
[2]=>
   string(35) "Date: Sun, 25 May 2014 09:50:12 GMT"
[3]=>
   string(38) "Expires: Sun, 25 May 2014 09:50:12 GMT"
[4]=>
   string(33) "Cache-Control: private, max-age=0"
[5]=>
   string(31) "X-Content-Type-Options: nosniff"
[6]=>
   string(27) "X-Frame-Options: SAMEORIGIN"
[7]=>
string(31) "X-XSS-Protection: 1; mode=block"
[8]=>
   string(11) "Server: GSE"
[9]=>
   string(28) "Alternate-Protocol: 443:quic"
}

现在我被困住了。我不知道下一步该怎么做才能找出问题所在。我错过了什么吗?我做错了吗?我不知道。

有什么提示吗?

编辑

感谢 hakre,我能够找到错误消息“accessnotconfigured”。

通过* Entry (second response),我突然想到要创建一个新项目。

然后我跳过了输入推荐人,现在它可以工作了!

问题是什么,我不知道。我怀疑这与推荐人有关。

【问题讨论】:

  • +1 对于您的第一个问题,请提供一个具体示例并展示您是如何进行调试的。也为了您解释您如何修复它以及您使用了哪些来源。欢迎使用 *!

标签: php youtube youtube-api


【解决方案1】:

Youtube API 有详细的 HTTP 响应正文错误报告,它不在响应标头中。

因此,每当您从 Youtube API 收到 HTTP 错误状态代码(代码 400 到 499 或简称为 4xx)时,您还需要查看已提供的 JSON。

要查看该 JSON,您可以在浏览器中快速输入 URL 以进行测试。您将收到一些 JSON,其中包含更好地描述您在发出请求时的错误。

如果您想在 PHP 中以编程方式执行此操作,您需要通过 $context 参数(或 setting the default context options)告诉 HTTP-wrapper used by file_get_contents,它不应该在 HTTP 错误时返回 FALSE(这些都是400-599 代码),但要返回响应正文,请参阅 ingore_errros in HTTP context options

例子:

<?php

stream_context_set_default(['http' => ['ignore_errors' => true]]);
$res = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=<vid-id>&key=<my-key>");
echo $res;

这给出了以下 JSON 输出:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Required parameter: part",
    "locationType": "parameter",
    "location": "part"
   }
  ],
  "code": 400,
  "message": "Required parameter: part"
 }
}

(你的可能会有所不同,因为你有我没有的实际 ID 和 KEY 参数)

【讨论】:

  • 谢谢!我用我想出的解决方案编辑了我的帖子。
【解决方案2】:

picasaweb.google.com/data/feed/api 也有类似的问题。 file_get_contents() 的问题在于它在出现 HTTP 错误时确实返回 false,因此它不提供对响应正文的访问。 在浏览器中使用 URL 可以让我看到响应正文中的错误消息并理解问题。

【讨论】:

    最近更新 更多