使用AWS预先签名的URL获取JSON响应

lps*_*lps 5 amazon-s3 boto3

我能够像这样生成一个预先签名的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
Run Code Online (Sandbox Code Playgroud)

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

最终我将使用javascript的URL客户端.这个例子只是为了说明问题.

使用预签名URL时(如果使用boto),如何在JSON中获得响应?似乎应该是可能的.

Jor*_*ips 4

没有办法做到这一点,S3只返回XML。boto3具有响应解析功能,可将其转换为字典以方便使用。