Если я PUT в Amazon S3 с помощью curl, запрос и ответ работают. Используя phpcurl, я получаю ошибку SignatureDoesNotMatch. Но подпись одинакова в любом случае, я думаю. Ниже у меня есть запрос curl и запрос php.
запрос скручивания
PUT long_amazon_url_here
Host: s3.amazonaws.com
User-Agent: curl/7.58.0
Accept: */*
Content-Type: application/pdf
x-amz-server-side-encryption: AES256
Content-Length: 655786
Expect: 100-continue
php curl request
PUT long_amazon_url_here
Accept: */*
x-amz-server-side-encryption: AES256
Content-Length: 656028
Content-Type: application/pdf; boundary=------------------------53e1e1c959bffe27
Expect: 100-continue
Код скручивания:
curl --verbose -X PUT -T file.pdf -H "Content-Type: application/pdf" -H "x-amz-server-side-encryption: AES256" "long_amazon_url_here"
Код php выглядит следующим образом:
$header = array(
"x-amz-server-side-encryption: AES256",
"Content-Type: application/pdf");
$url = long_amazon_url_here
$cFile = curl_file_create($fullPath_to_file);
$post = array('file_contents'=> $cFile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$response = curl_exec($ch);
Кто-нибудь знает, что я могу изменить, чтобы заставить работать версию phpcurl?