使用访问令牌将文件上传到Google云端硬盘,需要哪些身份验证范围?

时间:2012-08-28 13:31:46

标签: php curl google-drive-api

我正在尝试使用PHP将文件上传到Google云端硬盘。

对于授权码,我使用以下范围:

https://www.googleapis.com/auth/drive  
https://docs.google.com/feeds/  
https://docs.googleusercontent.com/  
https://spreadsheets.google.com/feeds/  

我已收到有效的refresh_token,我可以随时使用它来获取新的access_token

现在的问题是,当我尝试使用此access_token未被曝光,尚未使用)执行上传时,它说:

stdClass Object
(
    [error] => stdClass Object
        (
            [errors] => Array
                (
                    [0] => stdClass Object
                        (
                            [domain] => global
                            [reason] => required
                            [message] => Login Required
                            [locationType] => header
                            [location] => Authorization
                        )

                )

            [code] => 401
            [message] => Login Required
        )
)

我正在使用curl和以下标题:

Array
(
    [0] => Content-Type: text/plain
    [1] => Content-Length: 503242
    [2] => Authorization: Bearer ya29.AHES6ZRWXZkZDDi6AFV9PK2QonHp93nIfJbYqipXFT1uCsg
    [3] => GData-Version: 3.0
)

以下网址:

https://www.googleapis.com/upload/drive/v2/files?uploadType=media

CURL命令就像:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADERS, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($file));
$return = curl_exec($ch);
curl_close($ch);

任何帮助都将深受赞赏...... 提前谢谢......

3 个答案:

答案 0 :(得分:2)

将文件上传到云端硬盘所需的唯一OAuth范围是https://www.googleapis.com/auth/drive.file

对于所有可能的范围,请查看文档:{​​{3}}

顺便说一下,Drive API不是基于GData的,因此您无需在请求中添加GData-Version标头。

我还建议您将您的请求与OAuth 2.0 Playground发送的请求进行比较,以便更容易发现错误:

https://developers.google.com/drive/scopes

答案 1 :(得分:0)

尝试使用以下范围: https://www.googleapis.com/auth/drive.file

同时验证您是否已完成文档中给出的步骤

https://developers.google.com/drive/about-auth

如果你不想使用curl。你可以使用插入文件的Googlephpclientlibarary的插入方法。

否则将请求与Claudio提到的OauthPlayground进行比较

答案 2 :(得分:0)

CURLOPT_HTTPHEADER,而不是CURLOPT_HTTPHEADERS