我正在从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电子邮件地址的其他建议,我持开放态度。
答案 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);