. * * * The author of this software is Mashape, Inc. * For any question or feedback please contact us at: support@mashape.com * */ require_once(dirname(__FILE__) . "/../json/Json.php"); require_once(dirname(__FILE__) . "/Chunked.php"); require_once(dirname(__FILE__) . "/../exceptions/MashapeClientException.php"); require_once(dirname(__FILE__) . "/HttpMethod.php"); require_once(dirname(__FILE__) . "/UrlUtils.php"); require_once(dirname(__FILE__) . "/AuthUtil.php"); require_once(dirname(__FILE__) . "/../auth/HeaderAuth.php"); require_once(dirname(__FILE__) . "/../auth/BasicAuth.php"); require_once(dirname(__FILE__) . "/../auth/CustomHeaderAuth.php"); require_once(dirname(__FILE__) . "/../auth/MashapeAuth.php"); require_once(dirname(__FILE__) . "/../auth/QueryAuth.php"); class HttpClient { public static function doRequest($httpMethod, $url, $parameters, $authHandlers, $encodeJson = true) { if (!($httpMethod == HttpMethod::DELETE || $httpMethod == HttpMethod::GET || $httpMethod == HttpMethod::POST || $httpMethod == HttpMethod::PUT)) { throw new MashapeClientException(EXCEPTION_NOTSUPPORTED_HTTPMETHOD, EXCEPTION_NOTSUPPORTED_HTTPMETHOD_CODE); } $response = self::execRequest($httpMethod, $url, $parameters, $authHandlers); if (!$encodeJson) { return $response; } $jsonResponse = json_decode($response); if (empty($jsonResponse)) { // It may be a chunked response $jsonResponse = json_decode(http_chunked_decode($response)); if (empty($jsonResponse)) { throw new MashapeClientException(sprintf(EXCEPTION_JSONDECODE_REQUEST, $response), EXCEPTION_SYSTEM_ERROR_CODE); } } return $jsonResponse; } private static function execRequest($httpMethod, $url, $parameters, $authHandlers) { $data = null; $headers = array(); $headers[] = UrlUtils::generateClientHeaders(); // Authentication foreach($authHandlers as $handler) { if ($handler instanceof QueryAuth) { $parameters = array_merge($parameters, $handler->handleParams()); } else if ($handler instanceof HeaderAuth) { $headers[] = $handler->handleHeader(); } } UrlUtils::prepareRequest($url, $parameters, ($httpMethod != HttpMethod::GET) ? true : false); if ($httpMethod != HttpMethod::GET) { //$url = self::removeQueryString($url); $data = http_build_query($parameters); } $ch = curl_init (); // prepare the request //curl_setopt($ch, CURLOPT_USERPWD, "username:password"); for basic auth curl_setopt ($ch, CURLOPT_URL , $url); if ($httpMethod != HttpMethod::GET) { curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, $httpMethod); //curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, $data); } curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); curl_close($ch); return $response; } private static function removeQueryString($url) { $pos = strpos($url, "?"); if ($pos !== false) { return substr($url, 0, $pos); } return $url; } } ?>