Тип "application / json" запрещает отправку переменных сообщения - PullRequest
3 голосов
/ 17 февраля 2011

Я обнаружил, что если я попробую PHP POST curl, postvars отправляются нормально.Когда я добавляю httpheader типа content: application/json, postvars больше не отображаются.Я попробовал postvars как строку JSON и как строку запроса.

Отображение некоторого кода:

$ch = curl_init();

$post =  json_encode(array('p1' => 'blahblahblah', 'p2' => json_encode(array(4,5,6))));

$arr = array();
array_push($arr, 'Content-Type: application/json; charset=utf-8');

curl_setopt($ch, CURLOPT_HTTPHEADER, $arr);
curl_setopt($ch, CURLOPT_URL, 'https://example.com/file.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

curl_exec($ch);
curl_close($ch);

1 Ответ

5 голосов
/ 17 февраля 2011

Настоящая HTTP-запись, автоматически разбиваемая PHP на массив, должна быть отформатирована в парах имя = значение. Лучший способ сделать это в PHP - использовать функцию http_build_query.

http://ca2.php.net/manual/en/function.http-build-query.php

Есть пример, который работает в руководстве по PHP с использованием curl:

http://ca2.php.net/manual/en/function.curl-exec.php#98628

То, что вы делаете, это сообщение 'RAW', см. Этот другой вопрос:

Как опубликовать JSON в PHP с помощью curl

Быстрый фрагмент для получения RAW-данных Json.

<?php

print_r(json_decode(file_get_contents('php://input')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...