php - 如何将 CURL 转换为 Guzzle HTTP?
问题描述
我正在尝试将 curl 请求转换为 Guzzle:
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>
文档指出:“您必须使用多部分表单,并将所有参数作为表单输入包含在请求正文中。”
解决方案
使用 multipart 而不是 form_params 效果很好!
推荐阅读
- python-3.x - 在 Python 和 Keras 中使用 sparse_categorical_crossentropy 模型找到最高概率值
- google-apps-script - TypeError:无法在 onEdit 读取未定义的属性“getValue”
- qt - 为什么 Qt Creator 无法识别 Qt 安装目录?
- angular - Angular Http拦截器列表响应标头
- reactjs - 为什么我的状态是未定义的,即使我正在设置它
- google-cloud-sql - 将新列添加到现有表 CloudSQL Postgres 9.6
- html - 如何填充页面网格并将内容宽度布置在单列中?
- java - 确定名词/动词的复数
- ssl - 自动生成 SSL 证书
- node.js - 这些天在 Windows 中 nvm 是否与节点相关,我应该使用它吗?如果是,为什么?