Я называю себя опытным разработчиком PHP, но это сводит меня с ума. Я пытаюсь получить информацию о выпуске репозитория для отображения предупреждений об обновлении, но я продолжаю возвращать 403 ошибки. Для упрощения я использовал самое простое использование GitHubs API: GET https://api.github.com/zen. Это своего рода привет мир.
Это работает
curl https://api.github.com/zen
в терминалеЭто работает не
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-header-заголовка, но я не могу найти эту информацию в API-Docs, ни использует мой терминал curl
-звоните любые специальные заголовочные файлы и работает.
Это происходит потому, что 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."
Других решений пока нет …