【发布时间】:2016-09-21 00:00:56
【问题描述】:
我可以像这样生成一个预签名的网址
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 更新请求的标头,但这会导致 AWS 出现“SignatureDoesNotMatch”错误。
最终我将使用带有 javascript 的 URL 客户端。这个例子只是为了说明问题。
使用预签名 URL(最好使用 boto)时,如何以 JSON 格式获取响应?看来应该可以了。
【问题讨论】:
-
要提示 API 以 JSON 格式返回响应,您通常发送
Accept: application/json-- 而不是Content-Type:。但是,S3 不会生成 JSON 响应。 -
啊,对,是的,我也尝试设置
Accept标头,但没有成功。