使用 Guzzle 发布表单数据始终返回 404



我一直很难使用 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 请求。

还是莫名其妙。

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

第二个错误

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

你应该使用multipart而不是form_params而且您不需要请求部分的 JSON 选项

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

因此请求应如下所示

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

可以在此处查看多部分的参考

当你设置你base_uri你不必在帖子中添加它。您很可能会调用和网址与此http://httpbin.com/http://httpbin.com类似,。

$response = $client->post('/', ['json' => [
'form_params' => [
....
],
]]);

最新更新