从适用于 PHP 的 AWS 开发工具包中提取受保护的请求响应

Posted

技术标签:

【中文标题】从适用于 PHP 的 AWS 开发工具包中提取受保护的请求响应【英文标题】:Extract Protected Request Response from AWS SDK for PHP 【发布时间】:2013-03-11 08:14:35 【问题描述】:

我正在使用新的 Amazon ElasticTranscoder 服务,并且不熟悉使用 AWS-SDK。我创建了一个成功的脚本,它运行 createJob 请求,将 Amazon S3 文件从一种格式转码为另一种格式。

问题是,我似乎无法访问发出请求时返回的响应$data。我可以看到它,它包含我需要的信息,但是当我尝试存储它时收到此错误:

Fatal error: Cannot access protected property Guzzle\Service\Resource\Model::$data

我的请求如下所示:

<?php
// Include the SDK
require 'aws.phar';
use Aws\ElasticTranscoder\ElasticTranscoderClient;

// Setup the trancoding service tool(s)
$client = ElasticTranscoderClient::factory( array(
    'key' => 'XXXXXXXXX',
    'secret' => 'XXXXXXXXX',
    'region' => 'us-east-1'
) );

// Create a new transcoding job
$file_name = '1362761118382-lqg0CvC1Z1.mov';
$file_name_explode = explode( '.', $file_name );

$webm_transcode_request = $client->createJob( array(
    'PipelineId' => '1362759955061-7ad779',
    'Input' => array(
        'Key' => $file_name,
        'FrameRate' => 'auto',
        'Resolution' => 'auto',
        'AspectRatio' => 'auto',
        'Interlaced' => 'auto',
        'Container' => 'auto',
    ),
    'Output' => array(
        'Key' => $file_name_explode[0] . '.webm',
        'ThumbnailPattern' => $file_name_explode[0] . '-thumb-resolution-count',
        'Rotate' => '0',
        'PresetId' => '1363008701532-b7d529' // BenchFly MP4
    )
) );

// Print the response data
echo '<pre>';
var_dump( $webm_transcode_request->data );
echo '</pre>';
?>

我一直在努力寻找一些关于使用 PHP 和 AWS SDK 处理响应请求的文档,非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

你有两个选择:

    使用toArray() 方法,在the docs 的“继承自Guzzle\Common\Collection 的方法”下列出。

    例如

    $webm_transcode_request->toArray();
    

    只需直接访问$data 属性的索引,就好像它们是响应对象的索引一样。这是因为Guzzle\Service\Resource\Model 类实现了PHP 的神奇ArrayAccess 接口,可以对$data 属性进行类似数组的访问。

    例如

    $response = $ec2Client->describeInstances();
    
    // Gets the value of the 'Reservations' key of the protected `$data` property
    // of `$response`
    var_dump($response['Reservations']);
    

【讨论】:

成功了,非常感谢 iPhoney!我知道必须有一种方法可以在某个地方处理它。 @iPhoney 和 Kevin 我正在尝试做同样的事情,但没有运气。我在做 $responseArray = Collection::toArray($response);但 $resonseArray 仍然为空。请告诉我我在这里做错了什么? @KevinLeary 我正在做 $responseArray = Collection::toArray($response);但 $resonseArray 仍然为空。请告诉我我在这里做错了什么? 7 年后,但我认为如果你要走那条路,应该是 $responseArray = $response-&gt;toArray()

以上是关于从适用于 PHP 的 AWS 开发工具包中提取受保护的请求响应的主要内容,如果未能解决你的问题,请参考以下文章

使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域

如何使用适用于 Node.js 的 AWS 开发工具包将 Amazon S3 中的所有对象从一个前缀复制/移动到另一个前缀

适用于 iOS/Android 的 AWS 移动开发工具包中内置的网络安全性如何?

使用适用于 Ruby 的 AWS 开发工具包时在 AWS Kinesis Firehose 记录之间插入换行符

在 ECS 中运行时,适用于 node.js 的 AWS 开发工具包未获取凭证

如何使用适用于 DynamoDb 的 AWS Rust 开发工具包编写惯用的 Rust 错误处理?