使用 Postman 获取 aws 存储桶内容列表 - “Get Bucket (Version 2)”Rest API

Posted

技术标签:

【中文标题】使用 Postman 获取 aws 存储桶内容列表 - “Get Bucket (Version 2)”Rest API【英文标题】:Get aws bucket content listing using Postman - "Get Bucket (Version 2)" RestAPI 【发布时间】:2018-02-22 14:40:33 【问题描述】:

我正在使用 Postman 发送 AWS S3 RestAPI“Get Bucket (Version 2)”以获取存储桶列表。

存储桶的名称是“test-bucket-1.ahadomain.com”(ahadomain.com 是我在 aws 中命名存储桶时使用的一个不存在的虚拟域)。我使用的用户凭据具有进行 S3 调用的所有权限。我正在关注页面上的信息 - http://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html

我正在使用端点:https://test-bucket-1.s3.us-east-1.amazonaws.com 我发送以下标头:Content-Type、Host、X-Amz-Content-Sha256、X-Amz-Date、授权

我需要添加“list-type”作为查询参数还是标题?如果作为查询参数,如何在url中声明。

我收到以下响应,其中不包含内容列表,仅包含存储桶本身的信息:

<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
        <ID>6893100ea2b48696e8ccc3aa17414f4325cf59b574474ad9de0bcb0d139590c9</ID>
        <DisplayName>ahmedsmail</DisplayName>
    </Owner>
    <Buckets>
        <Bucket>
            <Name>test-bucket-1.ahadomain.com</Name>
            <CreationDate>2017-09-06T06:36:15.000Z</CreationDate>
        </Bucket>
    </Buckets>
</ListAllMyBucketsResult>

任何帮助将不胜感激。

谢谢你, 艾哈迈德。

【问题讨论】:

https://test-bucket-1.s3.us-east-1.amazonaws.com 不正确。那是别人的存储桶,恰好是禁用的存储桶...该服务将您的请求解释为列出您的存储桶而不是您的对象的请求。您需要为您的存储桶区域使用端点之一:docs.aws.amazon.com/general/latest/gr/rande.html#s3_region,并在路径中使用存储桶名称。 只是好奇,为什么/如何告诉存储桶已禁用?在我的 AWS 控制台中,存储桶“test-bucket-1.ahadomain.com”列在美国西部(加利福尼亚北部)区域。对于这种情况,我使用以下端点:test-bucket-1.s3-us-west-1.amazonaws.com 仍然得到相同的信息,关于存储桶的信息,而不是内容。 :( 对,我告诉你你的端点不正确。您的端点应该是 s3-us-west-1.amazonaws.com/test-bucket-1.ahadomain.com?list-type=2 或左侧的 整个 存储桶名称 test-bucket -1.ahadomain.com.s3-us-west-1.amazonaws.com。另一个端点指的是一个禁用的存储桶,简称为“test-bucket-1”,它不是您的存储桶,而是其他人的存储桶,它似乎已被禁用。你的不是。 当我使用 URL - test-bucket-1.ahadomain.com.s3-us-west-1.amazonaws.com?list-typ… 时,我收到消息“连接到 .... 时出错。”基本上是 URL 格式的问题。当我使用 URL -“s3-us-west-1.amazonaws.com/…”时,我收到消息说我应该使用左侧带有存储桶名称的 URL(在此评论的开头注明)。邮递员不能使用带有左侧存储桶名称的URL吗? 带点的存储桶名称不适用于左侧的 https。只有http。 【参考方案1】:

选择的答案绝对有效! 谢谢

Tool:  Postman
function:  Get
Address:  https://s3.us-west-1.amazonaws.com/XXXXXXXX/?list-type=2
Region:  I am on us-west-1, **this is most common mistake people miss**. 

如下所示,得到 200

GET /XXXXXXXX/?list-type=2 HTTP/1.1 主机:s3.us-west-1.amazonaws.com 授权:AWS4-HMAC-SHA256 Credential=XXXXXXXXXXXXXXXXX/00000000/us-west-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=;lkasdfl;kajsdfk;jasd; kfjas;ldkfjas;ldkfja;skjdf;askdjf;lkasdjf

-方法

【讨论】:

【参考方案2】:

您可以执行以下操作:

    将方法设置为 GET 在网址中:https://s3.amazonaws.com/test-bucket-1.ahadomain.com/?list-type=2 注意:如果您的存储桶区域不在 us-east-1 中,请将 s3.amazonaws.com 更改为更正该区域的 S3 端点。 在“授权”选项卡中,设置以下内容: 一种。类型:AWS 签名 湾。访问密钥: C。密钥: d。 AWS 区域:us-east-1 注意:如果这不是您存储桶的区域,请更改此设置 e.服务名称:s3 F。选中“保存助手数据以请求” 转到“标题”选项卡,删除所有条目(如果有)。 然后点击“发送”按钮

Here sample result

【讨论】:

我尝试过这种方式,但没有奏效。将“.ahadomain.com”放在网址中会使事情变得混乱。 编辑了我的答案。 我清除了所有字段,重新输入了所有字段,Rest API 调用现在正在工作。我阅读了检查“保存助手数据以请求”,但无法理解。你知道它的意义或好处吗?顺便说一句,谢谢你的帮助。 抱歉我的回复晚了。我相信这个“​​将助手数据保存到请求”是将身份验证添加到请求中,我认为在通过 API 向 AWS 发送请求时需要这样做。

以上是关于使用 Postman 获取 aws 存储桶内容列表 - “Get Bucket (Version 2)”Rest API的主要内容,如果未能解决你的问题,请参考以下文章

获取存储桶中 AWS S3 密钥计数的快速方法

如何使用scala和aws-java-sdk从S3存储桶中获取所有S3ObjectSummary?

如何使用 Java 列出存储桶中的所有 AWS S3 对象

我只想提取 Aws s3 存储桶名称并以列表的形式显示

AWS 存储桶策略错误:策略具有无效操作

AWS S3使用邮递员将文件上传到存储桶不起作用