Я реализую PHP-скрипт, который получает HTTP-сообщение POST, содержащее в теле строку json, связанную с параметром report. Итак, HTTP POST report =.
Я тестирую это с помощью SimpleTest (PHP Unit Testing).
Я строю 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
SimpleTest автоматически выбирает тип контента application / x-www-form-urlencoded. Когда я устанавливаю «application / json», мой PHP-скрипт не видит никаких параметров и поэтому не может найти переменную «report».
Я полагаю, что с кодировкой URL-адреса что-то не так, но я потерял здесь понимание того, как я должен получить JSON.
Кроме того, какова обычная практика здесь? Использует ли подход ключ / значение, даже если вы просто отправляете все тело json? Или я могу просто выбросить строку json в тело HTTP POST и как-то ее прочитать? (У меня не получилось на самом деле прочитать это без переменной, на которую можно указать).
Во всяком случае, я надеюсь, что проблема несколько ясно сформулирована.
Большое спасибо заранее.
Dieter