使用 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的主要内容,如果未能解决你的问题,请参考以下文章