From c0c81dff2ca147b6843f320d7a92c2d97dd8747b Mon Sep 17 00:00:00 2001 From: Carter Roeser Date: Wed, 26 Apr 2023 17:27:37 -0700 Subject: [PATCH] Add support for raw JSON POST / PUT body --- RestService/Server.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/RestService/Server.php b/RestService/Server.php index d9d2c0c..b586636 100644 --- a/RestService/Server.php +++ b/RestService/Server.php @@ -1673,6 +1673,7 @@ public function run() { foreach ($params as $param) { $name = $this->argumentName($param->getName()); + // If argument is _ (underscore), pass all arguments if ($name == '_') { $thisArgs = array(); foreach ($_GET as $k => $v) { @@ -1680,12 +1681,22 @@ public function run() { $thisArgs[$k] = $v; } $arguments[] = $thisArgs; - } else { + } + // Else, pass the named argument + else { + + // Get PUT data (also supports JSON encoded POST data) $_PUT = null; + if (isset($_SERVER['REQUEST_METHOD'])) { $method = $_SERVER['REQUEST_METHOD']; - if ('PUT' === $method) { - parse_str(file_get_contents('php://input'), $_PUT); + if ('PUT' === $method || 'POST' === $method) { + try { + $_PUT = json_decode(file_get_contents("php://input"), true, 512, JSON_THROW_ON_ERROR); + } + catch (\JsonException $exception) { + parse_str(file_get_contents('php://input'), $_PUT); + } } }