2

我正在为我的大学项目使用 YouTube API,但我不断收到错误消息。在这里,我将他们发送到授权页面进行登录,当他们允许访问时,它会返回 $_GET['code'] 字符串。然后我将它与其他一些数据一起发送,它应该发回一个 JSON 对象。相反,我只是得到

警告:file_get_contents(https://accounts.google.com/o/oauth2/token) [function.file-get-contents]:打开流失败:HTTP 请求失败!第 27 行http://www.example.net/callback.php中的HTTP/1.0 400 错误请求

为了安全起见,我用 example.net 替换了我的域

urlencode($_GET['code']),
                'client_id' => urlencode('111522767640.apps.googleusercontent.com'),
                'client_secret' => urlencode('secret'),
                'redirect_uri' => urlencode('http://example.net/callback.php'),
                'grant_type' => urlencode('authorization_code')
            )
        );

        $参数 =
        数组('http' =>
            大批(
                '方法' => 'POST /o/oauth2/token HTTP/1.1',
                'header' => '主机:accounts.google.com\r\n'。                           
                            '内容类型:应用程序/x-www-form-urlencoded',
                '内容' => $postdata
            )
        );

        $context = stream_context_create($params);
        $result = file_get_contents('https://accounts.google.com/o/oauth2/token', false,$context);
        var_dump($_SESSION);
        var_dump($result);
    }
    else //如果代码没有设置,用户一定是错误地来到这里或者拒绝访问这个程序
    {
        //header('位置:www.example.net/error.php');
    }

?>
4

2 回答 2

0

file_get_contents将向GET指定的 url 发出请求,但oauth2/token需要POST请求。

请参阅参考Google OAuth2PHP HTTP

于 2012-03-24T20:13:55.873 回答
0

如果您使用的是 oauth2,请转到 library/oauth2/provider.php 并取消注释第 182 行显示的代码

            $ci = get_instance();
            $ci->load->spark('curl/1.2.1');
            $ci->curl
                ->create($url)
                ->post($params, array('failonerror' => false));

            $response = $ci->curl->execute();
于 2016-09-17T10:35:23.840 回答