开发项目需要用curl模拟post提交一个多维数组数据,请求另外一个项目的一个接口;传递的参数中,有一个参数的值为数组,而且很可能是一个很大的多维数组。但是当我使用普通的curl post代码提交,会报错误,错误提示如下:
PHP Notice: Array to string conversion
根据翻译,大概意思是:PHP注意:数组字符串转换
这里是一个CURL配置项
curl_setopt($ch, CURLOPT_URL, "$url"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch,CURLOPT_TIMEOUT,3); //定义超时3秒钟 // POST数据 curl_setopt($ch, CURLOPT_POST, 1); // 把post的变量加上 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //执行并获取url地址的内容 $output = curl_exec($ch); $errorCode = curl_errno($ch); //释放curl句柄 curl_close($ch);
后来百度了以下,自己写了两种解决方法:
1、使用http_build_query()函数,使数组生成一个经过 URL-encode 的请求字符串,那么在接口那边就可以做利用parse_str()函数反向处理,从而获得完整数组;
2、使用json_encode()函数,生成轻量的json格式数据,方便传输。但是到了接口那边使用$_POST接受post过来的数据就会出现问题,解决方法就是需要使用 file_get_contents( "php://input" )来获取post过来的数据,必须是post方式必须是post方式提交的数据,而且提交的不能是multipart/form-data类型的数据,然后再使用json_decode()函数解析数据。