【发布时间】:2020-03-19 11:13:33
【问题描述】:
我很难使用 Guzzle 发送简单的多部分表单请求。 出于某种原因,我总是收到 404 响应,但我使用 cURL 发出相同的请求,我得到 200 ok 并且数据已发布。
即使解决了类似的问题,我似乎也无法弄清楚问题所在。
这是我的 cURL 代码:
$body = shell_exec('curl -H \'Content-Type: multipart/form-data\' -H \'Accept: application/json\' \
-F "photo=@ "'.$photo.'" \
-F "api_key="'.$apiKey.'" \
-F "id=14784" \
"'.$apiUrl.'" 2>&1 > /dev/null 2>&1 &');
shell 在命令行中运行良好,但我需要将其转换为从控制器发出请求,因此我已将表单字段添加到 Guzzle,但没有得到 404。
这是 Guzzle 代码:
$guzzle = $client->request('POST', config('services.url'), [
'multipart' => [
['headers' => [
'Content-Type: multipart/form-data',
'Accept: application/json'
],
'name' => 'api_key',
'contents' => config('services.key'),
],
[
'name' => 'photo',
'contents' => $photo
],
[
'name' => 'id',
'contents' => "4084",
],
]
]);
为了发帖,我已经更改了网址,但我正在努力寻找原因,所以如果有人知道,请告诉我!
** 编辑 ** 我已经能够通过 404 但没有收到 500 错误,不确定是表单还是收件人服务器,因为我可以使用 Postman 成功向同一端点发出 POST 请求。
还是一头雾水。
【问题讨论】:
-
'name' => 'photo=@',??? -
是的,我需要将其添加为参数,请参阅原始 cURL 请求
-
还有
Content-Type: multipart/form-data在curl代码中,application/x-www-form-urlencoded在Guzzle代码中? -
在尝试复制之前,您应该了解工作代码在做什么。比如
@的意义是什么。 -
这能回答你的问题吗? Upload file using Guzzle 6 to API endpoint
标签: laravel curl http-status-code-404 guzzle