Я реализую PHP-скрипт, который получает сообщение HTTP POST с в теле строкой json, привязанной к параметру «отчет». Итак, отчет HTTP POST=. Я тестирую это с помощью SimpleTest (модульное тестирование PHP).
Я создаю json:
$array = array("type" => "start"); // DEBUG
$report = json_encode($array);
Я отправляю ПОЧТУ:
$this->post(LOCAL_URL, array("report"=>$json));
(вызывает метод класса WebTestCase из SimpleTest).
SimpleTest говорит, что отправляет это:
POST /Receiver/web/report.php HTTP/1.0
Host: localhost:8888
Connection: close
Content-Length: 37
Content-Type: application/x-www-form-urlencoded
report=%7B%22type%22%3A%22start%22%7D
Я получаю как таковой:
$report = $_POST['report'];
$logger->debug("Content of the report parameter: $report");
$json = json_decode($report);
Оператор отладки выше дает мне:
Content of the report parameter: {\"type\":\"start\"}
И когда я расшифровываю, выдает ошибку
Syntax error, malformed JSON
Тип контента «application/x-www-form-urlencoded» автоматически выбирается SimpleTest. Когда я устанавливаю значение «application/json», мой PHP-скрипт не видит никаких параметров и поэтому не может найти переменную «отчет». Я предполагаю, что что-то не так с кодировкой URL-адреса, но я не понимаю, как мне получить json через.
Кроме того, какова обычная практика здесь? Использует ли кто-нибудь подход ключ/значение, даже если вы просто отправляете все тело json? Или я могу просто сбросить строку json в тело HTTP POST и как-то прочитать ее? (Мне не удалось прочитать его без переменной, на которую можно было бы указать).
Во всяком случае, я надеюсь, что проблема несколько ясно сформулирована. Большое спасибо заранее.
Дитер