#php #curl #guzzle
Вопрос:
Я пытаюсь преобразовать запрос curl в жадность:
curl --location --request POST 'https://shopify.s3.amazonaws.com'
--form 'key="tmp/436699194/bulk/4fed3d0c/bulk-customer-insert-file.jsonl"'
--form 'x-amz-credential="AKIAJYM55WGJDKQ/20210625/us-east-1/s3/aws4_request"'
--form 'x-amz-algorithm="AWS4-HMAC-SHA256"'
--form 'x-amz-date="20210625T105058Z"'
--form 'x-amz-signature="6c02b9f5dff8dd57d04bcdef3e3e602cad09fa719ffd84d"'
--form 'policy="policy"'
--form 'acl="private"'
--form 'Content-Type="text/jsonl"'
--form 'success_action_status="201"'
--form 'file="https://files.com/uploads/imports/12841.jsonl"'
Запрос curl работает правильно, но когда я пытаюсь передать его в Guzzle, он перестает работать и возвращает ошибку:
$response = (new Client([
'headers' => ['Content-Type' => 'multipart/form-data']
]))->post('https://shopify.s3.amazonaws.com', [
'form_params' => [
'key' => 'tmp/436699194/bulk/492f28bf-d0c/bulk-customer-insert-file.jsonl',
'x-amz-credential' => 'AKIAJYKQ/20210625/us-east-1/s3/aws4_request',
'x-amz-algorithm' => 'AWS4-HMAC-SHA256',
'x-amz-date' => '20210625T05058Z',
'x-amz-signature' => '6c02b9f5dcde2cafa719ffd84d',
'policy' => 'policy',
'acl' => 'private',
'Content-Type' => 'text/jsonl',
'success_action_status' => '201',
'file' => 'https://files.com/uploads/imports/12841.jsonl',
],
]);
Ошибка:
<Error><Code>InvalidArgument</Code><Message>Conflicting query string parameters: acl, policy</Message><ArgumentName>ResourceType</ArgumentName><ArgumentValue>acl</ArgumentValue><RequestId>P6V9RFVQNMW249XD</RequestId><HostId>GhCPTKO2P/VysP90bvFI5lXiyzF0IlSX//rotCB/hTtxy8tQMcwqKh8j397VdMKYvD1UL aEgMo=</HostId></Error>
В документации говорится: «Вы должны использовать составную форму и включать все параметры в качестве входных данных формы в теле запроса».
Комментарии:
1. пробовал использовать
multipart
вместоform_params
? если немного повезет, это единственное, что ты делаешь неправильно.2. @hanshenrik да, не повезло. 🙁
Ответ №1:
Использование составных частей вместо form_params работало отлично!