使用 AWS 预签名 url 获得 JSON 响应

get JSON response using AWS presigned url

我可以像这样生成预签名的 url

import boto3
s3 = boto3.client('s3')
url = s3.generate_presigned_url( ClientMethod='list_objects', Params={'Bucket':'bucket-name'} )

# now get the listing
import requests
r = requests.get(url)

# r.status_code is 200
# Problem:  r.text output is in XML format

当我直接调用 s3.list_objects(Bucket='bucket-name') 时,我会在 JSON 中得到响应。生成 url 时没有指定内容类型的选项。我已尝试使用 accept: application/json 更新请求的 headers,但这会导致 AWS 出现 "SignatureDoesNotMatch" 错误。

最终我将使用 URL client-side 和 javascript。这个例子只是为了说明问题。

使用预签名 URL(最好使用 boto)时,如何在 JSON 中获得响应?看起来应该是可以的。

没有办法做到这一点,只有 S3 returns XML。 boto3 具有将其转换为字典以便于使用的响应解析。