向CURLOPT_POSTFIELDS传多维数组出现Array to String Conversion错误如何解决
报错原因
当你直接将多维数组传给CURLOPT_POSTFIELDS时,cURL默认仅支持自动处理一维数组,遇到嵌套数组时会尝试将数组转为字符串,因此抛出转换错误。
方案1:传递JSON格式raw数据(符合你提到的raw-data需求)
大部分后端接口接收raw格式参数时都支持JSON格式,处理步骤如下:
- 使用
json_encode()将多维数组转为JSON字符串 - 在请求头中添加
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
相关产品推荐
相关产品推荐

