Содержимое корзины Google Cloud Storage

<?php

$url="https://www.googleapis.com/storage/v1/b/sts_bucket/o?key=xxx&project=xxxxx
$ch=curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$json_response = curl_exec($ch);

if ($json_response == FALSE){
    echo "cURL error: " . curl_error($ch);
}

curl_close($ch);

echo "</pre>";
echo $json_response;
echo "</pre>";


?>

Я делаю следующий запрос в облачное хранилище Google, чтобы получить информацию о корзине. Но он показывает следующую ошибку: -

{ "error": { "errors": [ { "domain": "global", "reason": "required", 
"message": "Anonymous users does not have storage.objects.list access to 
 bucket sts_bucket.", "locationType": "header", "location": "Authorization" 
 } ], "code": 401, "message": "Anonymous users does not have 
storage.objects.list access to bucket sts_bucket." } }

person Jesil Desouza    schedule 17.07.2017    source источник


Ответы (1)


Вам необходимо включить заголовок authorization :. Для примера попробуйте запустить:

gsutil -d ls

и посмотрите в отладочных данных заголовок авторизации:, который он включает. Результат будет выглядеть примерно так:

... 
connect: (www.googleapis.com, 443)
send: 'GET /storage/v1/b?project=your-project&fields=nextPageToken%2Citems%2Fid&alt=json&projection=noAcl&maxResults=1000 HTTP/1.1\r\nHost: www.googleapis.com\r\ncontent-length: 0\r\nauthorization: Bearer your-oauth-token\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools gsutil/4.27 Python/2.7.6 (linux2) analytics/enabled\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
...

Надеюсь, это проясняет, что вам нужно изменить в своем коде.

person Mike Schwartz    schedule 17.07.2017
comment
Я бы рекомендовал не пытаться вручную кодировать аутентификацию на основе OAuth2, потому что токен доступа, необходимый для выполнения операций, действителен в течение ограниченного времени, и вам нужно получить новый токен, когда срок действия токена истечет (см. cloud.google.com/docs/authentication/getting-started). Вместо этого проще использовать библиотеку, которая обрабатывает OAuth2 за вас. У меня нет опыта работы с библиотеками PHP OAuth2, но вы, вероятно, можете найти полезную библиотеку в одной из них: google.com/search?q=php+oauth2 - person Mike Schwartz; 18.07.2017