阅读PHP中的Amazon Cloudfront API结果



我有一个PHP脚本,通过API向亚马逊的Cloudfront提交无效请求。

我可以捕获响应,但它返回的文本基本上是这样的:

HTTP/1.0 201 Created
Content-Type: text/xml
Location: https://cloudfront.amazonaws.com/2012-07-01/distribution/distribution ID/invalidation/invalidation ID
<Invalidation xmlns="http://cloudfront.amazonaws.com/doc/2012-07-01/">
   <Id>IDFDVBD632BHDS5</Id>
   <Status>InProgress</Status>
   <CreateTime>2013-04-16T19:37:58Z</CreateTime>   
   <InvalidationBatch>
      <Paths>
         <Items>
            <Path>/image1.jpg</Path>
         </Items>
      </Paths>
      <CallerReference>20130416090001</CallerReference>
   </InvalidationBatch>
</Invalidation>

我基本上只是想抓住状态值,我想我可以通过正则表达式或一些字符串操作来做到这一点,但我假设有更好的方法将返回的数据转换为对象并正确访问它。

我试着:

$dom = new DOMDocument();
$dom->loadXML($data);

但是$data不起作用,因为它实际上包含头部分"HTTP/1.0 201…"

有人知道正确的方法来处理这个吗?

你用的是什么脚本?您是否考虑过为PHP使用AWS SDK (https://github.com/aws/aws-sdk-php)?

使用AWS SDK for PHP,你可以做以下事情:

// Instantiate a CloudFront client
$cloudfront = AwsCloudFrontCloudFrontClient::factory(array(
    'key'    => 'your-aws-access-key-id',
    'secret' => 'your-aws-secret-key',
));
// Get the status of an invalidation
$invalidationStatus = $cloudfront->getInvalidation(array(
    'DistributionId' => 'your-distribution-id',
    'Id'             => 'your-invalidation-id',
))->get('Status');

通常Http客户端库应该这样做,您没有提到使用的那个。

仍然解析响应应该是简单的:

$dom->loadXML(substr($data, strpos("nn", $data)+2))

通过以下操作找到了这个问题。

$resp = substr($resp, strpos($resp, "rnrn")+4); // This strips out the header
$outputxml = simplexml_load_string($resp); // Converts it to an object in PHP which can be fed back more easily

最新更新