Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon PHP Rest API与CURL_Php_Rest_Amazon Web Services_Curl - Fatal编程技术网

Amazon PHP Rest API与CURL

Amazon PHP Rest API与CURL,php,rest,amazon-web-services,curl,Php,Rest,Amazon Web Services,Curl,我正在尝试编写一个脚本来自动更新我在Route 53中注册的名称服务器 这可以通过Amazon Rest API完成: 到目前为止,我一直在使用AmazonPHPSDK……但是这个SDK甚至不支持这个命令(或者大多数Route53命令) 我花了好几个小时试图使用php+curl形成一个请求。我有我所需要的一切-一个acesskeyID,秘密密钥,等等。无论我做什么,我似乎无法得到有效的签名。这些文档是一场噩梦……所有与PHP相关的内容都会立即指向SDK,而SDK在这里没有任何帮助 请告诉我如何

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

这可以通过Amazon Rest API完成:

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

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

请告诉我如何使用PHP发出REST请求,使用我的密钥签名,并获得响应


编辑:这是我在签署请求时尝试遵循的操作。

您使用的是哪个版本的SDK

根据需要,您可以使用以下选项:

$result = $client->updateDomainNameservers([/* ... */]);
$promise = $client->updateDomainNameserversAsync([/* ... */]);
以下是相关参数:

$result = $client->updateDomainNameservers([
    'DomainName' => '<string>', // REQUIRED
    'FIAuthKey' => '<string>',
    'Nameservers' => [ // REQUIRED
        [
            'GlueIps' => ['<string>', ...],
            'Name' => '<string>', // REQUIRED
        ],
        // ...
    ],
]);
或者使用任何一种

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


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

{
    "require": {
        "aws/aws-sdk-php": "3.*"
    }
}
然后运行
composer update

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

或者检查
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")
    )
]);

我已经通过composer安装了SDK,我假设我有最新版本。我收到此错误
Uncaught异常'Guzzle\Common\exception\InvalidArgumentException',消息“找不到与UpdateDomainNameServer匹配的命令”
。我能够在没有任何错误的情况下运行
$client->listHostedZones
,并在回答中提供了有关
编写器的更多信息。看看这是否是你拥有的。更新SDK后,我意识到了我的问题。我使用的是
Aws\Route53\Route53客户端而不是Aws\Route53Domains\Route53DomainClient
。谢谢你的回答!
"packages": [
    {
        "name": "aws/aws-sdk-php",
        "version": "3.18.32",
        "source": {
            "type": "git",
            "url": "https://github.com/aws/aws-sdk-php.git",
            "reference": "84b9927ee116b30babf90a9fc723764672543e29"
        },
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")
    )
]);