UPDATE 如果我执行curl_error(),则返回 libcurl中不支持或禁用协议https
如果我通过命令行发送curl请求,我会获得一个访问令牌:
curl --data“code = removed& client_id = removed& client_secret = removed& redirect_uri = https://group.cs.cf.ac.uk/group3/oAuth2redirect.php&scope=https://www.googleapis.com/auth/calendar&grant_type=authorization_code”https://accounts.google.com/o/oauth2/token
然而,当我尝试通过php curl执行此操作时,只返回任何内容
$code = $_GET['code'];
$client_id = "removed";
$client_secret = "removed";
$redirectUri = "https://group.cs.cf.ac.uk/group3/oAuth2redirect.php";
$scope = "https://www.googleapis.com/auth/calendar";
$grant_type = "authorization_code";
$url = "https://accounts.google.com/o/oauth2/token/";
$params = array(
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirectUri,
'scope' => $scope,
'grant_type' => $grant_type
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
curl_close($ch);
print_r($response);
有谁知道为什么这是happerning,我认为它可能与标题有关但是我真的无法解决这个问题。
任何帮助都会很棒
编辑 使用Google的oauth2库不是一个选项
答案 0 :(得分:3)
我现在已经解决了这个问题。事实证明curl没有设置为能够执行ssl请求(就像curl_error()返回libcurl中不支持或禁用协议https一样明显。
答案 1 :(得分:2)
我认为ssl会产生问题。谷歌是https,所以它也需要set_opt(“CURLOPT_SSL_VERIFYPEER”,val),更多细节访问,http://www.php.net/manual/en/function.curl-setopt-array.php除了其他东西,这可能是个问题。