Для возврата сообщения GitHub API требуется аутентификация, хотя я предоставляю токен доступа - PullRequest
0 голосов
/ 19 сентября 2018

Я вызываю GitHub API https://api.github.com/user/emails из сценария PHP.В основном мне нужен адрес электронной почты GitHub для учетной записи GitHub, используемой для входа в систему.

Вот ответ, который я получаю от API:

{ 
    "message": "Requires authentication", 
    "documentation_url": "https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user"
}

Даже если я передаю маркер доступа с заголовком для авторизацииЯ все еще получаю сообщение об аутентификации.

Вот мой код:

    $token = $_GET['token'];
    echo $token;

    $url = "https://api.github.com/user/emails";
    $auth = "Authorization: token ".$token;
    echo $auth;
    $accept = "Accept: application/vnd.github.v3+json";
    $useragent = "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 YaBrowser/16.3.0.7146 Yowser/2.5 Safari/537.36";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_HTTPHEADER, array($auth));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($accept));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($useragent));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

    $res = curl_exec($ch);
    echo ($res); 
    curl_close($ch);

Есть идеи, что я здесь не так делаю?Я открыт для любых других предложений по получению адреса электронной почты GitHub, связанного с зарегистрированной учетной записью GitHub.

1 Ответ

0 голосов
/ 19 сентября 2018

Многократный вызов curl_setopt() для CURLOPT_HTTPHEADER не будет работать, поскольку он перезапишет предыдущее значение, указанное для поля CURLOPT_HTTPHEADER.

Вы можете проверить это самостоятельно, включив CURLOPT_VERBOSE послекоторый вы можете увидеть, что cURL делает внутренне для вашего запроса.

Вам нужно будет указать один массив, который вы предоставляете для CURLOPT_HTTPHEADER:

$headers = array(
    "Authorization: token ".$token,
    "Accept: application/vnd.github.v3+json",
    "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 YaBrowser/16.3.0.7146 Yowser/2.5 Safari/537.36"
);

Теперь вы можете просто использовать curl_setopt() для установки CURLOPT_HTTPHEADER для включения всех заголовков, указанных в $headers:

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...