开发者

can't access the Amazon s3 data by query string authentication

My codes below is used to access the amazon s3 to get a .zip file 开发者_JS百科. and my request url is like this: http://xxx.s3.amazonaws.com/Pack1A.zip?AWSAccessKeyId=AKIAIEMQY4BEQUOCUP7Q&Expires=1298945115&Signature=sxoXZ4y7osXjn IycQynGbE9%2Bb5E%3D

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.

It always prints the error of 403 forbidden. Can someone tell me why?


I ran into a similar issue where requesting the pre-signed URL from a web browser was successful, but directly from PHP resulted in failure. After doing some digging, I learned that to simulate a web browser, you need to pass a Content-Type header with an empty value.

The AWS SDK for PHP provides the following sample in the 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
?>


Ensure that all ACLs are set correctly.

The example URL is using Query String Authentication but the code example shows setting the Authorization is being set. You only need to set one or the other. See the docs.

There is also a AWS PHP SDK.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜