开发者

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

开发者 https://www.devze.com 2023-02-14 04:47 出处:网络
My codes below is used to access the amazon s3 to get a .zip file 开发者_JS百科. and my request url is like this:

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

精彩评论

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