phpcurl не может поставить на Amazon s3 - PullRequest
1 голос
/ 03 апреля 2019

Если я 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?

...