. * * * 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"); class HttpClient { public static function doRequest($httpMethod, $url, $parameters, $publicKey, $privateKey, $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); } UrlUtils::prepareRequest($url, $parameters, ($httpMethod != HttpMethod::GET) ? true : false); $response = self::execRequest($httpMethod, $url, $parameters, $publicKey, $privateKey); 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, $publicKey, $privateKey) { $data = null; if ($httpMethod != HttpMethod::GET) { //$url = self::removeQueryString($url); $data = http_build_query($parameters); } //$headers = array(); $headers = array( ); $headers[] = AuthUtil::generateAuthenticationHeader($publicKey, $privateKey); $headers[] = UrlUtils::generateClientHeaders(); $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; } } ?>