не может получить доступ к данным Amazon s3 путем аутентификации строки запроса - PullRequest
0 голосов
/ 01 марта 2011


Мои коды ниже используются для доступа к amazon s3 для получения файла .zip.и мой запрос URL выглядит следующим образом: http://xxx.s3.amazonaws.com/Pack1A.zip?AWSAccessKeyId=AKIAIEMQY4BEQUOCUP7Q&Expires=1298945115&Signature=sxoXZ4y7osXjn IycQynGbE9%2Bb5E%3D

Фрагмент кода:

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.

Он всегда печатает ошибку 403 запрещено.Может кто-нибудь сказать мне, почему?

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Я столкнулся с подобной проблемой, когда запрос предварительно подписанного URL-адреса из веб-браузера был успешным, но непосредственно из PHP привел к сбою. Проведя некоторое копание, я узнал, что для имитации веб-браузера необходимо передать заголовок Content-Type с пустым значением.

AWS SDK для PHP предоставляет следующий пример в документации :

<?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
?>
0 голосов
/ 01 марта 2011

Убедитесь, что все ACL установлены правильно.

В примере URL используется Query String Authentication, но в примере кода показано, как устанавливается Authorization. Вам нужно только установить один или другой. См. документы .

Существует также AWS PHP SDK .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...