Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Post multidimensional array using CURL and get the result on server

I am sending data from my local machine to server using CURL. And the data is multidimensional array.

Array
(
[0] => stdClass Object
    (
        [id] => 1
    )
[1] => stdClass Object
    (
        [id] => 0
    )
[2] => stdClass Object
    (
        [id] => 11
    )
)

I am using this below code for sending the data.

$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

But at server when I try to put this incoming data to file or just print_r it gives me this below output

Array
(
[0] => Array
[1] => Array
[2] => Array
)

But I want the output in multidimensional.

I tried with print_r($_POST[0]) but it gives only Array text.

like image 345
Yogesh Suthar Avatar asked Jan 31 '13 11:01

Yogesh Suthar


3 Answers

cURL can only accept a simple key-value paired array where the values are strings, it can't take an array like yours which is an array of objects. However it does accept a ready made string of POST data, so you can build the string yourself and pass that instead:

$str = http_build_query($array);

...

curl_setopt($ch, CURLOPT_POSTFIELDS, $str);

A print_r($_POST) on the receiving end will show:

Array
(
    [0] => Array
        (
            [id] => 1
        )

    [1] => Array
        (
            [id] => 0
        )

    [2] => Array
        (
            [id] => 11
        )

)
like image 143
MrCode Avatar answered Oct 15 '22 18:10

MrCode


I would give a go to serialize and unserialize:

1) Before sending your array, serialize it (and set your transfer mode to binary):

(...)
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) When you receive the data, unserialize it:

$array = unserialize($_POST);

More details here and here

like image 32
mika Avatar answered Oct 15 '22 18:10

mika


$param['sub_array'] = json_encode($sub_array);

and on the other side

$sub_array= json_decode($_POST['sub_array']);
like image 44
Gianluca Demarinis Avatar answered Oct 15 '22 16:10

Gianluca Demarinis