即使我提供访问令牌,GitHub API返回消息也需要身份验证

时间:2018-09-19 16:56:00

标签: php api curl github oauth

我正在从PHP脚本调用GitHub API https://api.github.com/user/emails。基本上,我需要用于登录的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 :(得分:0)

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);