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.
精彩评论