2011-03-01 3 views
0


Mes codes ci-dessous sont utilisés pour accéder à l'Amazon S3 pour obtenir un fichier .zip. et mon url demande est comme ceci: http://xxx.s3.amazonaws.com/Pack1A.zip?AWSAccessKeyId=AKIAIEMQY4BEQUOCUP7Q&Expires=1298945115&Signature=sxoXZ4y7osXjn IycQynGbE9%2Bb5E%3Dne peut pas accéder aux données Amazon s3 par l'authentification par chaîne de requête

Code Snippet:

time_t rawtime; 
time(&rawtime); 

gHttpDownloader->SetRequestHeader("Authorization","AWS AKIAIEMQY4BEQUOCUP7Q:aN6bjwDkeZXIHDrqk3MHlj4shl0%3D"); 
gHttpDownloader->SetRequestHeader("Authorization", buf); 
gHttpDownloader->SetRequestHeader("Cache-Control", "max-age=0"); 
gHttpDownloader->SetRequestHeader("Accept","application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*;q=0.5"); 
gHttpDownloader->SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch"); 
gHttpDownloader->SetRequestHeader("Accept-Language", "en-GB"); 
gHttpDownloader->SetRequestHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 
gHttpDownloader->Post(gURL, NULL,0,GotHeaders, NULL); 

............ //GotHeaders is a callback function that reads input from the response. 

Il imprime toujours l'erreur de 403 interdit. Quelqu'un peut-il me dire pourquoi?

Répondre

0

Assurez-vous que toutes les ACL sont correctement définies.

L'exemple d'URL utilise Query String Authentication mais l'exemple de code indique que le paramètre Authorization est en cours de définition. Vous avez seulement besoin de définir l'un ou l'autre. Voir le docs. Il existe également un AWS PHP SDK.

+0

merci. J'utilise c plus plus cependant. – GGLouis

1

J'ai rencontré un problème similaire lorsque la demande de l'URL pré-signée à partir d'un navigateur Web a été couronnée de succès, mais directement à partir de PHP a entraîné un échec. Après avoir creusé, j'ai appris que pour simuler un navigateur Web, vous devez passer un Content-Type en-tête avec une valeur vide.

Le AWS SDK for PHP fournit l'exemple suivant dans le documentation:

<?php 
$s3 = new AmazonS3(); 

// Generate the URL 
$url = $s3->get_object_url('my-bucket', 'folder/file.txt', '5 minutes'); 

// Try to fetch the URL so we can get the status code 
$http = new CFRequest($url); 
$http->add_header('Content-Type', ''); # Simulate a web browser 
$http->send_request(true); 

echo $http->get_response_code(); 
#=> 200 
?> 
Questions connexes