我有一個關于使用AWS S3預簽名URL將檔案下載到遠程服務器的問題。我能夠成功地為一個 zip 檔案創建預簽名的 URL。如果我在瀏覽器中輸入預設的URL,我就可以成功地下載該壓縮檔案。然而,我還需要我們用戶的網站得到該壓縮檔案,將其下載到他們的服務器并解壓。所以我所做的是使用PHP CURL,并為CURLOPT_URL引數提供預設的URL。然而,當我這樣做時,壓縮檔案是空的,我得到一個錯誤資訊。因為我使用的是預設的URL,它已經有必要的授權&簽名頭來下載檔案。我的問題是,為什么它在PHP CURL中不作業,而只在瀏覽器中作業?我在這里做得不對嗎?
https://xxxxxxx-xxxxxxxxxx-xxxxxxx-231481972270.s3-accesspoint.us-east-1.amazonaws.com/serenity-pro/serenity-pro.zip? X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATLZLGSYXEHERUI4Z/20210913/us-east-1/s3/aws4_request&。 X-Amz-Date=20210913T042133Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=62ba2cb3d434f8643cd5099b74523234df46b3c9fdb0f5ab75d962c8ab4d0428
我的代碼:
// Download zip file
//$download_url是我為用戶生成的預設的URL。
$ch = curl_init();
$fp = fopen($theme_zip_path, "w "/span>)。
curl_setopt_array($ch, array(
CURLOPT_URL => $download_url,
CURLOPT_TIMEOUT => 600,
CURLOPT_FILE => $fp; $fp。
));
$contents = curl_exec($ch)。
curl_close($ch)。
fclose($fp)。
錯誤資訊: InvalidRequest 你所提供的授權機制不被支持。請使用 Signature Version 4
uj5u.com熱心網友回復:
如果你的url包含https,那么嘗試添加這個
。CURLOPT_SSL_VERIFYHOST
CURLOPT_SSL_VERIFYPEER
curl_setopt_array($ch, array(
CURLOPT_URL => $download_url,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false。
CURLOPT_TIMEOUT => 600,
CURLOPT_FILE =>$fp。
));
uj5u.com熱心網友回復:
如果有人遇到同樣的問題,解決方案是使用CloudFront簽名的URLs。
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreateURL_PHP.html
//創建一個CF簽名的URL。
使用 AwsCloudFrontCloudFrontClient。
$resourceKey = $cloudfront_url;
$expires = time() 1800;
$privateKey = 'YOURPRIVATEKEY.pem'/span>;
$keyPairId = 'YOURKEYPAIRID'/span>;
$cfClient = new AwsCloudFrontCloudFrontClient([
'version' => 'latest',
'region' => 'YOURREGION',
'credentials' => $credentials.
]);
$download_url = $cfClient-> getSignedUrl([
'url' => $resourceKey,
'expires' => $expires,
'private_key' => $privateKey,
'key_pair_id' => $keyPairId.
]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/319191.html
標籤:
