файл get contents() получает 403 из api.github.com каждый раз
Я называю себя опытным разработчиком PHP, но это сводит меня с ума. Я пытаюсь получить информацию о выпуске репозитория для отображения предупреждений об обновлении, но я продолжаю возвращать 403 ошибки. Для его упрощения я использовал самое простое использование API GitHubs: GET https://api.github.com/zen . Это своего рода приветственный мир.
Это работает
- непосредственно в браузере
- с простым
curl https://api.github.com/zen
в терминале - с классом PHP-Github-API как php-github-api
Это не работает
- с помощью простого
file_get_contents()
из PHP-скрипта
Вот весь мой упрощенный код:
<?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-заголовка, но я не могу найти эту информацию в API-документах, а также не использую свой терминал curl
- вызываю какие-либо специальные файлы заголовков и работает.
1 answers
Это происходит потому, что GitHub требует, чтобы вы отправили заголовок UserAgent. Это не должно быть чем-то конкретным. Это сделает:
$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."