You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Guzzle发送POST请求时无法正确传输PHP数组如何解决?

Guzzle POST请求发送指定格式JSON解决方案

错误方案原因分析

  • 直接传入原数组:原数组外层为带lorem_1/lorem_2键的关联数组,Guzzle会将其序列化为JSON对象结构,和要求的索引数组格式不符。
  • 传入json_encode处理后的字符串:Guzzle的json参数原生接收PHP数组/对象,底层会自动执行json_encode操作,传入已编码的字符串会导致内容被二次转义,完全不符合接口要求。
  • 仅用array_values处理后仍请求失败:目标JSON要求字段值为字符串类型,原数组中存储的data_1等字段为整型,对参数类型校验严格的接口会直接拒绝该请求。

正确实现代码

首先对数组做格式化处理,移除外层关联键的同时将所有字段值转为字符串类型:

$formattedData = array_map(function($item) {
    return array_map('strval', $item);
}, array_values($my_array));

再调用Guzzle发送请求:

$response = $client->request('POST', $uri, [
    'exceptions' => false,
    'debug' => false,
    'timeout' => 30,
    'json' => $formattedData
]);

注意:使用json参数时Guzzle会自动添加Content-Type: application/json请求头,无需手动设置。

验证调试方法

如果请求仍失败,可先自行校验生成的JSON是否符合预期:

echo json_encode($formattedData, JSON_PRETTY_PRINT);

也可开启debug => true查看实际发送的请求报文,或调用$response->getBody()->getContents()打印接口返回的错误信息,定位具体问题。

内容的提问来源于stack exchange,提问作者Sébastien Gicquel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:06:03