файл 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- вызываю какие-либо специальные файлы заголовков и работает.

Author: Cœur, 2016-05-10

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."
 13
Author: Aleksander Wons, 2016-05-10 15:00:26