Доступ к файлу ведра GCP с использованием PHP curl с использованием ключа JSON

Я новичок в GCP. У меня есть функция, которая выводит файл CSV в облачное хранилище GCP. Я пытаюсь получить доступ к файлу с помощью PHP.

Что я сделал до сих пор:

  1. Я создал учетную запись службы с помощью GCP IAM и предоставил ей доступ как средство просмотра объектов хранилища.

  2. Я также получил ключ json от IAM.

Какие команды мне нужно будет использовать в моем PHP-скрипте (размещенном на другом веб-сервере) для получения файла с помощью CURL и как использовать ключ аутентификации json?

Заранее прошу прощения, если это где-то есть в документации, я нашел это очень запутанным и чрезмерным. Любой совет или направление приветствуются.


Обновление:

На основании комментариев ниже приведена ссылка на google-cloud-php github, который Я нашел. Я не уверен, что это лучший ресурс для начала.


person Coola    schedule 23.01.2020    source источник
comment
Начните с SDK Google Cloud PHP и примеров кода.   -  person John Hanley    schedule 23.01.2020
comment
@JohnHanley благодарит за комментарий. Не могли бы вы поделиться ссылкой, у меня есть кое-что, что я нашел в Google, но не уверен, что нахожусь в нужном месте.   -  person Coola    schedule 23.01.2020
comment
Пожалуйста, сделайте наоборот. Поделитесь ссылками в своем вопросе.   -  person John Hanley    schedule 23.01.2020
comment
Я добавил ссылку, которую нашел. Это оно?   -  person Coola    schedule 24.01.2020
comment
Вы пробовали пример из документации? В вашей ссылке есть еще одна ссылка на обширный пример: github.com/ GoogleCloudPlatform / php-docs-samples / tree / master /   -  person John Hanley    schedule 24.01.2020
comment
Нет, я не. Но я сделаю это сейчас. Спасибо.   -  person Coola    schedule 24.01.2020
comment
Я просто хочу добавить, что эта ссылка немного помогла quick.work/?page=view- blog & id = 26   -  person Coola    schedule 24.01.2020


Ответы (2)


Вы можете использовать библиотеку облачного хранилища для php, а именно, как загрузить объекты.

person coyote-tango    schedule 23.01.2020

Прежде всего, вы должны получить доступ для аутентификации. Для этого вам понадобится ключ аутентификации json.

Эта страница мне очень помогла: https://www.it-swarm.dev/de/curl/wie-kann-man-mit-curl-eine-verbindung-zum-google-drive-api-herstellen/806069468/

Возможно, этот PHP-код вам немного поможет:

    function get_Google_accesstoken($scope,$credfile,$proxy,$timetoexpiration){
    #Developers Info at developers.google.com/identity/protocols/oauth2/service-account
        $GoogleApiKeyInfo=GoogleApiKeyInfo($credfile);
        $Header=array();
        $Header["alg"]="RS256";
        $Header["typ"]="JWT";
        $ClaimSet["iss"]=$GoogleApiKeyInfo["client_email"];
        $ClaimSet["scope"]=$scope;
        $ClaimSet["aud"]=$GoogleApiKeyInfo["token_uri"];
        $ClaimSet["iat"]=time();
        $ClaimSet["exp"]=$ClaimSet["iat"]+($timetoexpiration);
        $Jws=base64_encode(json_encode($Header)).".".base64_encode(json_encode($ClaimSet));
        $OpenSslRslts=openssl_sign($Jws,$Signature,$GoogleApiKeyInfo["private_key"],OPENSSL_ALGO_SHA256);
        $Jwt=$Jws.".".base64_encode($Signature);
        $SendVars=array();
        $SendVars["grant_type"]=("urn:ietf:params:oauth:grant-type:jwt-bearer");
        $SendVars["assertion"]=$Jwt;
        $SendVars=http_build_query($SendVars);


    
    $ch=curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $GoogleApiKeyInfo["token_uri"]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $SendVars);
    $headers = array();
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($ch);
    if (curl_errno($ch)){
    echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    $response=json_decode($response);
    return $response;

}

подсказки для $ scope можно найти на странице developers.google.com/identity/protocols/oauth2/scopes $ proxy используется только в том случае, если вам нужен прокси, а $ timetoexpiration не влияет, потому что ваш доступ всегда действителен в течение 60 минут.

person Christian Croseck    schedule 29.06.2020