我正在使用 Laravel 并尝试使用以下代码向 API 发送 PUT 请求:
$client->put('api_nginx/v1/countries/' . $id . '/update', [
'json' => $request->all(),
]);
请求中发送的数据($request->all())如下:
{
"country_iso2": [
"US",
"NL"
],
"url": [
"https://example.com",
"https://example.com"
],
"wager": [
null,
null
],
"minimum_withdrawal_time": [
null,
null
],
"maximum_withdrawal_time": [
null,
null
],
"payment_type_ids": [
[
"1",
"3",
"4"
],
[
"1",
"2",
"4",
"5"
]
]
}
但是,我面临一个问题,即发出请求时未发送 payment_type_ids 字段。我认为问题是由于 payment_type_ids 是多维数组造成的。有趣的是,当我使用 Postman 时,该请求完美地工作。
有人可以帮助解释为什么多维数组导致 Laravel HTTP 客户端出现问题以及如何修复它吗?
出现此问题的原因是 Laravel HTTP 客户端 (
Http::put
) 自动将您发送的数据转换为 JSON 格式。当您包含像 payment_type_ids
这样的多维数组时,Laravel 依赖 PHP 的 json_encode()
函数来处理转换。
为了确保数据格式正确并按预期发送,请将数据显式编码为 JSON 并指定
Content-Type
标头
$client->put('api_nginx/v1/countries/' . $id . '/update', [
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode($request->all()),
]);
带走积分
json_encode()
确保嵌套数组正确编码。Content-Type
标头设置为application/json
以告知服务器数据格式。body
参数而不是 json
传递。使用 json
自动对数据进行编码,但使用 body
显式编码可以为您提供更多控制。