Example #1
0
 private function execute_request($method, $path, $parameters)
 {
     if (!in_array($method, $this->allowed_methods)) {
         throw new HostControlAPIClientError('Unsupported request method.');
     }
     $handler = curl_init();
     $url = $this->baseurl . $path;
     if ($method == self::HTTP_METHOD_GET) {
         if (is_array($parameters) && count($parameters) > 0) {
             $query_string = http_build_query($parameters);
             $url .= $query_string;
         }
     } else {
         $parameters = json_encode($parameters);
         if ($parameters === false) {
             throw new HostControlAPIClientError('Unable to encode parameters.');
         }
         curl_setopt($handler, CURLOPT_POSTFIELDS, $parameters);
     }
     curl_setopt($handler, CURLOPT_URL, $url);
     curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($handler, CURLOPT_FRESH_CONNECT, true);
     curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, false);
     curl_setopt($handler, CURLOPT_SSL_VERIFYHOST, false);
     curl_setopt($handler, CURLOPT_CUSTOMREQUEST, $method);
     curl_setopt($handler, CURLOPT_HTTPHEADER, array("X-APIKEY: {$this->apikey}"));
     $response = curl_exec($handler);
     if (strlen($response) == 0) {
         throw new HostControlAPIClientError('No response received.');
     }
     $status_code = curl_getinfo($handler, CURLINFO_HTTP_CODE);
     if ($status_code != 200) {
         throw new HostControlAPIClientError("Received status code '{$status_code}' .");
     }
     $response = json_decode($response);
     if (!is_object($response)) {
         throw new HostControlAPIClientError('Invalid response received.');
     }
     if (!property_exists($response, 'success') || !$response->success) {
         if (is_object($response->error->message)) {
             $nested_errors = get_object_vars($response->error->message);
             $messages = array();
             foreach ($nested_errors as $attribute => $error) {
                 $messages[] = ucfirst($attribute) . ": " . join(', ', $error);
             }
             $error = join(", ", $messages);
         } else {
             if (!empty($response->error->message)) {
                 $error = $response->error->message;
             } else {
                 $error = HostControlHelper::get_human_friendly_error($response->error->code);
             }
         }
         throw new HostControlAPIClientError($error);
     }
     if (property_exists($response, 'result')) {
         return $response->result;
     }
     return null;
 }