Я хочу общаться с 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