Amazon PHP Rest API with CURL


Amazon PHP Rest API with CURL

我正在尝试编写一个脚本来自动更新我在Route 53中注册的名称服务器。

这可以通过Amazon Rest API完成:

http://docs.aws.amazon.com/Route53/latest/APIReference/api-update-domain-name-servers.html

到目前为止,我一直在使用AmazonPHPSDK。。。但是这个SDK甚至不支持这个命令(或者大多数Route 53命令)。

我花了几个小时试图使用php+ccurl来形成一个请求。我有我需要的一切-一个acesskeyID,密钥等。无论我做什么,我似乎都无法获得有效的签名。医生是一场噩梦。。。与PHP相关的一切都会立即将您指向SDK,这在这里没有任何帮助。

请告诉我如何用PHP发出REST请求,用我的密钥签名,然后得到响应。

编辑:以下是我在签署请求时尝试遵循的内容。

您使用的是哪个版本的SDK?

根据api v3文档,您可以使用以下内容:

$result = $client->updateDomainNameservers([/* ... */]);
$promise = $client->updateDomainNameserversAsync([/* ... */]);

这些是相关参数:

$result = $client->updateDomainNameservers([
    'DomainName' => '<string>', // REQUIRED
    'FIAuthKey' => '<string>',
    'Nameservers' => [ // REQUIRED
        [
            'GlueIps' => ['<string>', ...],
            'Name' => '<string>', // REQUIRED
        ],
        // ...
    ],
]);

如果您没有使用最新版本的sdk,您可以使用composer:进行安装

php composer.phar require aws/aws-sdk-php

或者使用这里的任何安装方法。

我真的认为你最好坚持使用SDK,除非真的不可能(我认为这里不是这样,如果我错了,请纠正我)。


如果使用composer安装,您可以更新composer.json文件以包含:

{
    "require": {
        "aws/aws-sdk-php": "3.*"
    }
}

并运行composer update

如果你只想检查你正在使用的sdk的哪个版本,你可以运行composer info(在该目录中):

> composer info
aws/aws-sdk-php        3.18.32 AWS SDK for PHP - Use Amazon Web Services in your PHP project
guzzlehttp/guzzle      6.2.1   Guzzle is a PHP HTTP client library
guzzlehttp/promises    1.2.0   Guzzle promises library
guzzlehttp/psr7        1.3.1   PSR-7 message implementation
mtdowling/jmespath.php 2.3.0   Declaratively specify how to extract elements from a JSON document
psr/http-message       1.0     Common interface for HTTP messages

或者检查composer.lock文件的内容。你应该有你正在使用的sdk的版本:

"packages": [
    {
        "name": "aws/aws-sdk-php",
        "version": "3.18.32",
        "source": {
            "type": "git",
            "url": "https://github.com/aws/aws-sdk-php.git",
            "reference": "84b9927ee116b30babf90a9fc723764672543e29"
        },

确保使用最后一个。

多亏了@Dekel,我才得以解决这个问题。这是我的最终代码。

require_once '/vendor/autoload.php';
$access_key="XXXXX";
$secret_key="XXXXXXXXXXXX";
$client = Aws'Route53Domains'Route53DomainsClient::factory(array(
        'region'=> "us-east-1",
        'version'=>'2014-05-15',
        'credentials' => array(
        'key'    => $access_key,
        'secret' => $secret_key,
    )));
$result = $client->updateDomainNameservers([
    'DomainName' => 'example.com',
    "Nameservers"=>array(
        array("Name"=>"ns.1.com"),
        array("Name"=>"ns.2.com")
    )
]);