/** * Send HTTP request * * Given a Method, URL, Headers, and Body, perform and HTTP request, * and return an array of arity 2 containing an associative array of * response headers and the response body. * * @return array */ public static function httpRequest($method, $url, $request_headers = array(), $obj = '') { # Set up curl $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers); if ($method == 'GET') { curl_setopt($ch, CURLOPT_HTTPGET, 1); } else { if ($method == 'POST') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $obj); } else { if ($method == 'PUT') { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($ch, CURLOPT_POSTFIELDS, $obj); } else { if ($method == 'DELETE') { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); } else { if ($method == 'HEAD') { curl_setopt($ch, CURLOPT_NOBODY, 1); } } } } } # Capture the response headers... $response_headers_io = new StringIO(); curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$response_headers_io, 'write')); # Capture the response body... $response_body_io = new StringIO(); curl_setopt($ch, CURLOPT_WRITEFUNCTION, array(&$response_body_io, 'write')); try { # Run the request. curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); # Get the headers... $parsed_headers = Utils::parseHttpHeaders($response_headers_io->contents()); $response_headers = array("http_code" => $http_code); foreach ($parsed_headers as $key => $value) { $response_headers[strtolower($key)] = $value; } # Get the body... $response_body = $response_body_io->contents(); # Return a new RiakResponse object. return array($response_headers, $response_body); } catch (Exception $e) { curl_close($ch); error_log('Error: ' . $e->getMessage()); return null; } }