首页 > 解决方案 > 使用 Guzzle 发布表单数据总是返回 404

问题描述

我很难使用 Guzzle 发送简单的多部分表单请求。出于某种原因,我总是收到 404 响应,但我使用 cURL 发出相同的请求,我得到 200 ok 并发布了数据。

即使解决了类似的问题,我似乎也无法弄清楚问题所在。

这是我的卷曲代码:

$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 请求。

还是一头雾水。

标签: laravelcurlhttp-status-code-404guzzle

解决方案


有 2 个错误第一次你设置了 base_uri 然后你再次调用它

第二个错误

正如你提到的,你将使用多部分

你应该使用multipartnotform_params 并且你不需要请求部分的 json 选项

标题更改为此Content-Type' => multipart/form-data

因此请求应该是这样的

$response = $client->post('/', [
    'multipart' => $params,
]);

参考可以在这里看到多部分


推荐阅读