Подтвердить что ты не робот

Как включить данные массива в CURLOPT_POSTFIELDS?

Я в основном обрабатываю HTML-форму с помощью PHP, а затем отправляю ее в другом месте для хранения и обработки. Однако у меня возникают проблемы с отправкой списков массивов через завиток. Мне нужно сделать это таким образом, что когда он попадает на принимающий сервер, он как бы прямо из входной формы.

Я не получаю никаких ошибок при использовании функции, если я сериализую массивы, однако это делает их нечитаемыми сервером, поэтому им необходимо сохранить формат сообщения, как если бы они поступали из HTML-формы.

Я использую Kohana, но принципы Curl все те же, здесь мой код:

            $path = "/some/process/path";
            $store = "http://www.website.com";

            $url = $store . $path;

            $screenshots = array();
            $screenshots[0] = 'image1.jpg';
            $screenshots[1] = 'image2.jpg';
            $screenshots[2] = 'image3.jpg';

            $videoLinks = array();
            $videoLinks[0] = 'video1.wmv';
            $videoLinks[1] = 'video2.wmv';

            $params = array(
                'id' => '12',
                'field1' => 'field1text',
                'field2' => 'field2text',
                'field3' => 'field3text',
                'screenshots' => $screenshots,
                'videoLinks' => $videoLinks,
            );

            $options = array(
                CURLOPT_HTTPHEADER => array("Accept: application/json"),
                CURLOPT_TIMEOUT => 30,
                CURLOPT_POST => TRUE,
                CURLOPT_POSTFIELDS => $params,
            );

            $data = Remote::get($url, $options);
            $json = json_decode($data);

Приветствия.

4b9b3361

Ответ 2

Я просто хотел поделиться альтернативой http_build_query()

Вы можете включать в себя входы массива с помощью CURLOPT_POSTFIELDS, предоставляя каждый элемент subarray отдельно.

Вместо...

$videoLinks = array();
$videoLinks[0] = 'video1.wmv';
$videoLinks[1] = 'video2.wmv';

$params = array(
    ...
    'videoLinks' => $videoLinks;
    ...
);

... сделайте это...

$params = array(
    ...
    'videoLinks[0]' => 'video1.wmv';
    'videoLinks[1]' => 'video2.wmv';
    ...
);

Ответ 3

Я новичок в cURL и его PHP-версии, но насколько я знаю, вы можете делать массивы в своем варианте просто отлично, просто не забывайте, что если вы отправляете массив значений field = > , тогда вы необходимо установить заголовок Content-Type для multipart/form-data для правильной интерпретации. При этом ваш массив для параметров форматируется неправильно. У вас есть дополнительная запятая после окончательного значения массива. Возможно, это то, что делает его борем.