我自称是一名经验丰富的PHP开发者,但这个问题让我抓狂。我正在尝试获取仓库的发布信息以显示更新警告,但我一直返回403错误。为了简化它,我使用了GitHubs API的最简单用法:GET https://api.github.com/zen。这有点像一个hello world。
这个可以:
- 直接在浏览器中使用 - 在终端中使用一个简单的curl https://api.github.com/zen命令 - 使用类似php-github-api的PHP-Github-API-Class
这个不行:
- 从PHP脚本中使用简单的file_get_contents()函数
这是我整个简化代码:
浏览器显示“警告:file_get_contents(https://api.github.com/zen):无法打开流:HTTP请求失败!HTTP/1.0 403 Forbidden”,变量$content是一个布尔值且为false。
我猜测我缺少某种http-header-fields,但既找不到这些信息在API-Docs中,也没有使用我的终端
这个可以:
- 直接在浏览器中使用 - 在终端中使用一个简单的curl https://api.github.com/zen命令 - 使用类似php-github-api的PHP-Github-API-Class
这个不行:
- 从PHP脚本中使用简单的file_get_contents()函数
这是我整个简化代码:
<?php
$content = file_get_contents("https://api.github.com/zen");
var_dump($content);
?>
浏览器显示“警告:file_get_contents(https://api.github.com/zen):无法打开流:HTTP请求失败!HTTP/1.0 403 Forbidden”,变量$content是一个布尔值且为false。
我猜测我缺少某种http-header-fields,但既找不到这些信息在API-Docs中,也没有使用我的终端
curl
调用任何特殊的头文件并且可以工作。
allow_url_fopen
是否已启用? - Pitchinnateallow_url_fopen
已启用。感谢 @RickS 推荐的工具,我将在未来的工作流程中加入它。解决方案是缺少的头字段,正如我所猜测的那样。请参见标记的答案。 - Cologne_Muc