我能够像这样生成预先签名的网址
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
更新请求的标头,但这会导致" SignatureDoesNotMatch"来自AWS的错误。
最终我将使用javascript的URL客户端。这个例子只是为了说明问题。
使用预签名URL(最好使用boto)时,如何在JSON中获得响应?似乎应该是可能的。
答案 0 :(得分:4)
没有办法做到这一点,S3只返回XML。 javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Foo"). Expected elements are <{http://acme.com/schema}Foo>,...>
具有响应解析功能,可将其转换为字典以便于使用。