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

向CURLOPT_POSTFIELDS传多维数组出现Array to String Conversion错误如何解决

报错原因

当你直接将多维数组传给CURLOPT_POSTFIELDS时,cURL默认仅支持自动处理一维数组,遇到嵌套数组时会尝试将数组转为字符串,因此抛出转换错误。


方案1:传递JSON格式raw数据(符合你提到的raw-data需求)

大部分后端接口接收raw格式参数时都支持JSON格式,处理步骤如下:

  1. 使用json_encode()将多维数组转为JSON字符串
  2. 在请求头中添加Content-Type: application/json声明数据格式

修改后的cURL代码示例:

// 先将数组转为JSON字符串
$postfields = json_encode($post_data);

curl_setopt_array($curl, array(
  CURLOPT_URL => "<URL>",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => $postfields,
  CURLOPT_HTTPHEADER => array(
        "Authorization: Bearer <key>",
        "Content-Type: application/json" // 必须添加该头声明
    ),
));

方案2:传递form-urlencoded格式参数

如果你的接口要求接收表单格式的参数,可以使用http_build_query()处理多维数组,它会自动将嵌套结构展开为符合规范的键值对字符串:

修改后的代码示例:

// 处理多维数组为urlencoded字符串
$postfields = http_build_query($post_data);

curl_setopt_array($curl, array(
  CURLOPT_URL => "<URL>",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => $postfields,
  CURLOPT_HTTPHEADER => array(
        "Authorization: Bearer <key>",
        "Content-Type: application/x-www-form-urlencoded"
    ),
));

内容的提问来源于stack exchange,提问作者Malav Vasita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:57:03