получить ответ в формате JSON с использованием заранее подписанного URL-адреса AWS

Я могу создать такой заранее подписанный 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, но это привело к ошибке «SignatureDoesNotMatch» от AWS.

В конечном итоге я буду использовать URL-адрес на стороне клиента с javascript. Этот пример просто иллюстрирует проблему.

Как получить ответ в формате JSON при использовании заранее подписанного URL-адреса (желательно с использованием boto)? Похоже, это должно быть возможно.


person lps    schedule 23.05.2016    source источник
comment
Чтобы предложить API вернуть ответ в формате JSON, вы обычно отправляете Accept: application/json, а не Content-Type:. Однако S3 не генерирует ответы в формате JSON.   -  person Michael - sqlbot    schedule 24.05.2016
comment
Ах, да, я тоже пробовал установить заголовок Accept, но ничего не вышло.   -  person lps    schedule 24.05.2016


Ответы (1)


Нет способа сделать это, S3 возвращает только XML. boto3 имеет синтаксический анализ ответа, который преобразует его в словарь для простоты использования.

person Jordon Phillips    schedule 23.05.2016
comment
Я не смог найти в их документации ничего об этом. Я протестировал вызов, используя их REST API, и получил обратно XML, даже с заголовком Accept, установленным на application/json, так что очевидно, что это правильно. Если вы можете добавить ссылку на документацию, я приму это как ответ. - person lps; 24.05.2016
comment
lps, в их документации нет места, где прямо говорится, что мы только XML. Однако нигде не документируется возможность возврата JSON. Здесь находится страница документа для вашего запроса. . Обратите внимание, что все задокументированные ответы представляют собой XML, и нет задокументированного механизма для его изменения. - person Jordon Phillips; 24.05.2016