diff --git a/src/FusionDirectory/Rest/WebServiceCall.php b/src/FusionDirectory/Rest/WebServiceCall.php index d0359690af4c7a93a9c38753a6591c01fe828e08..ebbeef771689f6f7d1da57a9cb50d180f4881842 100644 --- a/src/FusionDirectory/Rest/WebServiceCall.php +++ b/src/FusionDirectory/Rest/WebServiceCall.php @@ -10,6 +10,8 @@ class WebServiceCall */ private $ch; + private $httpStatusCode; // Store the HTTP status code + /** * @param string $URL * @param string $method @@ -70,7 +72,12 @@ class WebServiceCall break; case 'post': curl_setopt($this->ch, CURLOPT_POST, TRUE); - curl_setopt($this->ch, CURLOPT_POSTFIELDS, json_encode($this->data)); + + // Allows a POST to be performed without DATA + if (!empty($this->data)) { + curl_setopt($this->ch, CURLOPT_POSTFIELDS, json_encode($this->data)); + } + curl_setopt($this->ch, CURLOPT_USERAGENT, $customUserAgent); break; } @@ -206,17 +213,36 @@ class WebServiceCall public function execute(): array { $response = curl_exec($this->ch); + + // Capture the HTTP status code + $this->httpStatusCode = curl_getinfo($this->ch, CURLINFO_HTTP_CODE); + $this->handleCurlError($this->ch); - + + // Handle 204 No Content response + if ($this->httpStatusCode === 204) { + curl_close($this->ch); + return []; // Return an empty array for 204 responses + } + $decoded = json_decode($response, true); curl_close($this->ch); - + if (!is_array($decoded)) { throw new \Exception('Invalid JSON response: ' . $response); } - + return $decoded; } +/** + * Retrieve the HTTP status code of the last request + * @return int + */ +public function getHttpStatusCode(): int +{ + return $this->httpStatusCode; +} + }