Как подключиться к amazon-lightsail через PHP CURL и перечислить все экземпляры? - PullRequest
1 голос
/ 23 октября 2019

Я хочу общаться с amazon lightsail с PHP curl вместо SDK, потому что я не привык использовать composer в своем проекте, и я хочу использовать небольшое количество функций в SDK, поэтому я пытаюсь сделатьэто через curl

Когда я выполняю удар по коду, я получаю этот ответ

<code><?php
// set our constants
define('SERVICE'    , 'lightsail');
define('ACCESS_KEY' , 'xxxxxxxxxxxxxxxxxxxx');
define('SECRET_KEY' , 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
define('REGION'     , 'eu-west-2');
define('PROFILE'    , 'default');
define('VERSION'    , '20161128');
define('COMMAND'    , 'getInstances');

class AWS{
    static  $utc_tz;
    function lightsail( $payload ){
        self::$utc_tz = new \DateTimeZone( 'UTC' );
        $APIVERSION = VERSION;
        $datestamp  = new \DateTime( "now", self::$utc_tz );
        $longdate   = $datestamp->format( "Ymd\\THis\\Z");
        $shortdate  = $datestamp->format( "Ymd" );
        // establish the signing key

        $ksecret    = 'AWS4' . SECRET_KEY;
        $kdate      = hash_hmac( 'sha256', $shortdate, $ksecret, true );
        $kregion    = hash_hmac( 'sha256', REGION, $kdate, true );
        $kservice   = hash_hmac( 'sha256', SERVICE, $kregion, true );
        $ksigning   = hash_hmac( 'sha256', 'aws4_request', $kservice, true );

        // command parameters
        $params     = array(
            'host'          => SERVICE.'.'.REGION.'.amazonaws.com',
            'content-type'  => 'application/x-amz-json-1.1',
            'x-amz-date'    => $longdate,
            'x-amz-target'  => SERVICE.'_'. $APIVERSION . '.'.COMMAND,
            'content-length' => strlen( $payload ),
            'user-agent'    => 'LDP',
            'connection'    => 'keep-alive',
        );
        $canonical_request  = $this->createCanonicalRequest( $params, $payload );
        $signed_request     = hash( 'sha256', $canonical_request );
        $sign_string        = "AWS4-HMAC-SHA256\n{$longdate}\n$shortdate/".REGION."/".SERVICE."/aws4_request\n" . $signed_request;
        $signature          = hash_hmac( 'sha256', $sign_string, $ksigning );
        $params['authorization'] = "AWS4-HMAC-SHA256 Credential=" . ACCESS_KEY . "/$shortdate/".REGION."/".SERVICE."/aws4_request, " .
            "SignedHeaders=" . implode( ";", array_keys( $params ) )  . ", " .
            "Signature=$signature";
        /*
         * Execute Crafted Request
         */
        $url    = "https://".SERVICE.".".REGION.".amazonaws.com";
        $ch     = curl_init();
        $curl_headers = array();
        foreach( $params as $p => $k )
            $curl_headers[] = $p . ": " . $k;
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_TCP_NODELAY, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false );
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false );
        // debug opts

        curl_setopt($ch, CURLOPT_VERBOSE, true);
        $verbose = fopen('php://temp', 'rw+');
        curl_setopt($ch, CURLOPT_STDERR, $verbose);
        $result = curl_exec($ch); // raw result
        rewind($verbose);
        $verboseLog = stream_get_contents($verbose);
        echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "
\ n "; var_dump ($ result);} частная функция createCanonicalRequest ($ params, $ payload) {$ canonical_request =array (); $ canonical_request [] = 'POST'; $ canonical_request [] = '/'; $ canonical_request [] = ''; $ can_headers = array ('host' => SERVICE. '.'. REGION. '. amazonaws.com '); foreach ($ params as $ k => $ v) $ can_headers [strtolower ($ k)] = trim ($ v); uksort ($ can_headers,' strcmp '); foreach ($ can_headers as $k => $ v) $ canonical_request [] = $ k. ':'. $ v; $ canonical_request [] = ''; $ canonical_request [] = implode (';', array_keys ($ can_headers)); $ canonical_request [] = хэш ('sha256', $ payload); $ canonical_request = implode ("\ n", $ canonical_request); возвращение $ canonical_request;}} $ a = new AWS (); $ a-> lightsail ('{"instanceName": "vodo.website"}');Подробная информация: * Перестроен URL-адрес: https://lightsail.eu -west-2.amazonaws.com / * Попытка 52.94.56.147 ... * Набор TCP_NODELAY * Подключено к lightsail.eu-west-2.amazonaws.com (52.94.56.147)порт 443 (# 0) * Выбор шифра: ВСЕ:! EXPORT:! EXPORT40:! EXPORT56:! aNULL:! LOW:! RC4: @STRENGTH * успешно настроил расположение сертификатов для проверки: * CAfile: c: \ cert \ cacert.pemCApath: нет * NPN, согласованное HTTP1.1 * SSL-соединение с использованием TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * Сертификат сервера: * тема: CN = lightsail.eu-west-2.amazonaws.com * дата начала: 2019-10-04 00:00:00 GMT * Дата истечения срока: 2020-09-25 12:00:00 GMT * эмитент: C = США;O = Amazon;OU = Сервер CA 1B;CN = Amazon * SSL-сертификат подтвердите. > POST / HTTP / 1.1 хост: lightsail.eu-west-2.amazonaws.com Принять: * / * content-type: application / x-amz-json-1.1 x-amz-date: 20191023T063052Z x-amz-target:lightsail_20161128.getInstances content-length: 38 пользовательский агент: LDP-соединение: keep-alive авторизация: AWS4-HMAC-SHA256 Credential = xxxxxxxxxxxxxxxxxxx / 20191023 / eu-west-2 / lightsail / aws4_request, SignedHeaders = host; тип содержимого; x-amz-date; x-amz-target; длина содержимого; пользовательский агент; соединение, подпись = 389a5fc1aaa37bbb046faac409c52fc337585c7b8223e8abac6952e4060f989b * загрузка полностью отправлена: 38 из 38 байт

Я ожидаю выводаиз всех моих экземпляров вместо UnknownOperationException

...