我一直很难使用 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' => [
....
],
]]);