(PHP) $ _POST + cURL + мульти массив - PullRequest
       21

(PHP) $ _POST + cURL + мульти массив

2 голосов
/ 22 сентября 2011

Я пытаюсь отправить мульти массив через cURL, но не могу найти хороший способ сделать это.

Пример моего кода:

$data = array( 'a' => 'testa', 'b' => 'testb', 'c[d]' => 'test1', 'c[e]' => 'test2' );

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

Это сработает и даст желаемый результат на сайте curl_init():

print_r( $_POST ):

Array (

    [a] => testa
    [b] => testb
    [c] => Array (

            [d] => test1
            [e] => test2
    )
)

Я бы хотел добавить массив c динамически, например:

$c['d'] = 'test1';
$c['e'] = 'test2';

Но если я пытаюсь добавить массив с array_push или [], я всегда получаю и (string) Array в массиве без данных.

Может кто-нибудь помочь мне сделать это?

Весь код для более быстрого тестирования:

$url = 'url_to_test.php';
$data = array( 'a' => 'testa', 'b' => 'testb', 'c[d]' => 'test1', 'c[e]' => 'test2' );
$ch = curl_init($url);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$buffer = curl_exec ($ch);
curl_close ($ch);

echo $buffer;

test.php

print_r($_POST);

Спасибо за любую помощь!

ура

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

В

$data = array( 'a' => 'testa', 'b' => 'testb', 'c[d]' => 'test1', 'c[e]' => 'test2' )

Вы просто добавили новые строковые ключи "c [d]" и "c [e]".

Если вы хотите вложенный массив, используйте:

$data = array( 'a' => 'testa', 'b' => 'testb', 'c' => 
    array( 'd' => 'test1', 'e' => 'test2' )
)

- РЕДАКТИРОВАТЬ -

Вы пытаетесь установить данные POST, которые, по сути, представляют собой набор пар ключ-значение. Вы не можете предоставить вложенный массив. Однако вы можете сериализовать вложенный массив и декодировать его на другом конце. Например:

$post_data = array('data' => serialize($data));

А на приемном конце:

$data = unserialize($_POST['data']);
0 голосов
/ 11 февраля 2016

вот ваше решение

$urltopost = "http://example.com/webservice/service.php";
$datatopost = array (0 =>array('a'=>'b','c'=>'d'),1 =>array('a'=>'b','c'=>'d'),2 =>array('a'=>'b','c'=>'d'),3 =>array('a'=>'b','c'=>'d'));
$post_data = array('data' => serialize($datatopost));

$ch = curl_init ($urltopost);
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS,$post_data);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$returndata = curl_exec ($ch);

echo "<pre>";
print_r(unserialize($returndata));

service.php код

$temp = unserialize($_POST['data']);
echo serialize($temp);
...