file_get_contents() 每次都从 api.github.com 得到 403
file_get_contents() gets 403 from api.github.com every time
我自称是一位经验丰富的 PHP 开发人员,但这让我抓狂。我正在尝试获取存储库的发布信息以显示更新警告,但我一直返回 403 错误。为了简化它,我使用了 GitHubs API 最简单的用法:GET https://api.github.com/zen。这是一种你好世界。
这个有效
- 直接在浏览器中
- 在终端中使用普通
curl https://api.github.com/zen
- 与 PHP-Github-API-Class 类似 php-github-api
这不行
- 使用来自 PHP-Skript
的简单 file_get_contents()
这是我的整个简化代码:
<?php
$content = file_get_contents("https://api.github.com/zen");
var_dump($content);
?>
浏览器显示Warning: file_get_contents(https://api.github.com/zen): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden
,变量$content
是布尔值,false
.
我想我缺少某种 http-header-fields,但我既不能在 API-Docs 中找到这些信息,也不能使用我的终端 curl
-调用任何特殊的头文件并且有效。
发生这种情况是因为 GitHub 要求您发送 UserAgent header。它不需要是任何特定的。这将做:
$opts = [
'http' => [
'method' => 'GET',
'header' => [
'User-Agent: PHP'
]
]
];
$context = stream_context_create($opts);
$content = file_get_contents("https://api.github.com/zen", false, $context);
var_dump($content);
输出为:
string(35) "Approachable is better than simple."
我自称是一位经验丰富的 PHP 开发人员,但这让我抓狂。我正在尝试获取存储库的发布信息以显示更新警告,但我一直返回 403 错误。为了简化它,我使用了 GitHubs API 最简单的用法:GET https://api.github.com/zen。这是一种你好世界。
这个有效
- 直接在浏览器中
- 在终端中使用普通
curl https://api.github.com/zen
- 与 PHP-Github-API-Class 类似 php-github-api
这不行
- 使用来自 PHP-Skript 的简单
file_get_contents()
这是我的整个简化代码:
<?php
$content = file_get_contents("https://api.github.com/zen");
var_dump($content);
?>
浏览器显示Warning: file_get_contents(https://api.github.com/zen): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden
,变量$content
是布尔值,false
.
我想我缺少某种 http-header-fields,但我既不能在 API-Docs 中找到这些信息,也不能使用我的终端 curl
-调用任何特殊的头文件并且有效。
发生这种情况是因为 GitHub 要求您发送 UserAgent header。它不需要是任何特定的。这将做:
$opts = [
'http' => [
'method' => 'GET',
'header' => [
'User-Agent: PHP'
]
]
];
$context = stream_context_create($opts);
$content = file_get_contents("https://api.github.com/zen", false, $context);
var_dump($content);
输出为:
string(35) "Approachable is better than simple."