使用 CURL 发布多维数组并在服务器上获取结果
Posted
技术标签:
【中文标题】使用 CURL 发布多维数组并在服务器上获取结果【英文标题】:Post multidimensional array using CURL and get the result on server 【发布时间】:2013-01-15 12:20:23 【问题描述】:我正在使用CURL
将数据从我的本地计算机发送到服务器。并且数据是多维数组。
Array
(
[0] => stdClass Object
(
[id] => 1
)
[1] => stdClass Object
(
[id] => 0
)
[2] => stdClass Object
(
[id] => 11
)
)
我正在使用下面的代码来发送数据。
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "my_url");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array); // $array is my above data
但在服务器上,当我尝试将传入的数据放入文件或只是 print_r
时,它会在下面输出
Array
(
[0] => Array
[1] => Array
[2] => Array
)
但我想要多维的输出。
我尝试使用print_r($_POST[0])
,但它只提供Array
文本。
【问题讨论】:
【参考方案1】:$param['sub_array'] = json_encode($sub_array);
另一边
$sub_array= json_decode($_POST['sub_array']);
【讨论】:
嗯,我不记得我是否尝试过这种方式。但可能对其他用户有用。 :)【参考方案2】:我会尝试序列化和反序列化:
1) 在发送您的数组之前,将其序列化(并将您的传输模式设置为二进制):
(...)
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // need this to post serialized data
curl_setopt($ch, CURLOPT_POSTFIELDS, serialize($array)); // $array is my above data
2) 收到数据后,反序列化:
$array = unserialize($_POST);
更多详情here 和 here
【讨论】:
很好,但它没有这样工作,我不得不curl_setopt($ch, CURLOPT_POSTFIELDS, array('data'=>serialize($array)));
然后$array = unserialize($_POST['data']);
【参考方案3】:
cURL 只能接受一个简单的键值对数组,其中值是字符串,它不能接受像你这样的数组,它是一个对象数组。但是它确实接受一个现成的 POST 数据字符串,因此您可以自己构建字符串并传递它:
$str = http_build_query($array);
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
接收端会显示一个print_r($_POST)
:
Array
(
[0] => Array
(
[id] => 1
)
[1] => Array
(
[id] => 0
)
[2] => Array
(
[id] => 11
)
)
【讨论】:
感谢您的回答,让您知道何时将其集成到我的代码中。我还有一个问题,我尝试发送数组数组,但在接收端它给出了相同的输出Array ( [0] => Array [1] => Array [2] => Array )
是的,cURL 不能采用数组或对象数组,它只能采用一维字符串数组,除非您手动构建发布数据(如答案中所示)。
感谢 MrCode 今天我已经实现了你的代码,现在它可以按我的意愿工作了。再次感谢。以上是关于使用 CURL 发布多维数组并在服务器上获取结果的主要内容,如果未能解决你的问题,请参考以下文章
PHP/mysql:使用数组查询 MySQL 并在数组中获取结果