2016-05-23 11 views
3

Ich bin in der Lageerhalten JSON Antwort AWS presigned URL

wie so
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 

eine presigned URL zu erzeugen, wenn ich einen direkten Aufruf tun s3.list_objects(Bucket='bucket-name') dann erhalte ich die Antwort in JSON. Es gibt keine Option zum Festlegen des Inhaltstyps beim Generieren der URL. Ich habe versucht, die Header der Anfrage mit accept: application/json zu aktualisieren, aber das führt zu einem "SignatureDoesNotMatch" Fehler von AWS.

Letztendlich werde ich die URL-Client-Seite mit Javascript verwenden. Dieses Beispiel soll nur das Problem veranschaulichen.

Wie bekomme ich die Antwort in JSON bei Verwendung einer vordefinierten URL (vorzugsweise mit Boto)? Scheint so, als müsste es möglich sein.

+1

Um eine API aufzufordern, die Antwort als JSON zurückzugeben, senden Sie normalerweise 'Accept: application/json' - nicht' Content-Type: '. S3 generiert jedoch keine JSON-Antworten. –

+0

Ahh, richtig, ja, ich habe versucht, den 'Accept'-Header zu setzen und es hat nicht funktioniert. – lps

Antwort

2

Es gibt keine Möglichkeit dies zu tun, S3 gibt nur XML zurück. boto3 hat Antwortanalyse, die es in ein Wörterbuch für die Benutzerfreundlichkeit konvertiert.

+0

Ich konnte nichts in ihrer Dokumentation finden, die das angibt. Ich habe einen Aufruf mit der REST-API getestet und XML zurückgegeben, auch wenn der Header "Accept" auf "application/json" gesetzt ist, das ist offensichtlich richtig. Wenn Sie einen Verweis auf die Dokumentation hinzufügen können, akzeptiere ich dies als Antwort. – lps

+0

lps, es gibt keinen Platz in ihren Dokumenten, wo sie explizit sagen "wir sind nur XML". Es gibt jedoch auch nirgends dokumentiert, dass sie JSON zurückgeben können. [Hier] (http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) ist die Dokumentseite für die Anforderung, die Sie erstellen. Beachten Sie, dass alle dokumentierten Antworten XML sind und es keinen dokumentierten Mechanismus gibt, um dies zu ändern. –

+0

Wahr, ok akzeptieren. – lps