Я пытаюсь загрузить файл на Google Диск с помощью PHP.
Для кода авторизации я использую следующие области:
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 )
И следующий URL:
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);
Любая помощь будет сердечно оценена … Спасибо заранее …
Единственной областью OAuth, которую необходимо загрузить на диск, является https://www.googleapis.com/auth/drive.file
.
Для всех возможных областей применения проверьте документацию: https://developers.google.com/drive/scopes
Кстати, API-интерфейс Drive не основан на GData, поэтому вам не нужно добавлять заголовок GData-Version
в свои запросы.
Я также рекомендую вам сравнить ваши запросы с отправленными на OAuth 2.0 Playground, чтобы было легко обнаружить ошибку:
Попробуйте использовать следующую область: https://www.googleapis.com/auth/drive.file
Также убедитесь, что вы прошли через шаги, указанные в документации, тщательно
https://developers.google.com/drive/about-auth
Если вы не хотите использовать curl.You можете использовать метод вставки Googlephpclientlibarary для вставки файлов.
В противном случае сравните запрос с OauthPlayground, как упомянуто Claudio
CURLOPT_HTTPHEADER, а не CURLOPT_HTTPHEADERS