【问题标题】:Amazon PHP Rest API with CURL带有 CURL 的 Amazon PHP Rest API
【发布时间】:2016-07-26 12:20:36
【问题描述】:

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

这可以通过 Amazon Rest API 完成:

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

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

我花了好几个小时尝试使用 php+curl 形成一个请求。我有我需要的一切——accesskeyID、密钥等。无论我做什么,我似乎都无法让签名有效。文档是一场噩梦……与 PHP 相关的所有内容都会立即将您指向 SDK,这在这里没有任何帮助。

请告诉我如何使用 PHP 发出 REST 请求,使用我的密钥对其进行签名,然后获得响应。

编辑:Here 是我尝试遵循的签名请求。

【问题讨论】:

    标签: php rest amazon-web-services curl


    【解决方案1】:

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

    根据api v3 docs你可以使用这个:

    $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
    

    或使用任何installation methods here

    我真的认为你最好坚持使用 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"
            },
    

    确保使用最后一个。

    【讨论】:

    • 我通过 composer 安装了 SDK,我以为我有最新版本。我收到此错误Uncaught exception 'Guzzle\Common\Exception\InvalidArgumentException' with message 'Command was not found matching UpdateDomainNameservers'。我能够运行 $client-&gt;listHostedZones 没有任何错误
    • 用有关composer 的更多信息更新了答案。检查看看这是否是你所拥有的。
    • 更新SDK后,我意识到我的问题。我使用的是Aws\Route53\Route53Client; 而不是Aws\Route53Domains\Route53DomainsClient。谢谢你的回答!
    【解决方案2】:

    感谢@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")
        )
    ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2013-03-21
      • 2021-02-02
      • 2016-06-14
      • 2015-07-31
      相关资源
      最近更新 更多