Не удалось открыть поток: сбой HTTP-запроса!Неверный запрос HTTP / 1.0 400 - OAuth 2.0 POST - PullRequest
2 голосов
/ 24 марта 2012

Я работаю с API-интерфейсами YouTube для своего проекта в колледже и получаю сообщение об ошибке. Здесь я отправляю их на страницу авторизации для входа, когда они разрешают доступ, она отправляет обратно строку $ _GET ['code']. Затем я отправляю это вместе с некоторыми другими данными, и он должен отправить обратно объект JSON. Вместо этого я просто получаю

Предупреждение: file_get_contents (https://accounts.google.com/o/oauth2/token) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не удалось! Неверный запрос HTTP / 1.0 400 в http://www.example.net/callback.php в строке 27

Я заменил свой домен на 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')
            )
        );

        $params = 
        array('http' =>
            array(
                'method'  => 'POST /o/oauth2/token HTTP/1.1',
                'header'  => 'Host: accounts.google.com\r\n'.                           
                            'Content-Type: application/x-www-form-urlencoded',
                'content' => $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 //If code isnt set, user must have come here erroniously or has denied access to this program
    {
        //header( 'Location: www.example.net/error.php' ) ;
    }

?>

Ответы [ 2 ]

0 голосов
/ 17 сентября 2016

если вы используете oauth2, зайдите в библиотеки / 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();
0 голосов
/ 25 марта 2012

file_get_contents собирается сделать запрос GET на указанный URL, но oauth2/token нужен запрос POST.

См. Ссылку Google OAuth2 , PHP HTTP .

...