/** * @param string|array $response */ public function setResponseHeaders($response) { $this->responseHeaders = array_change_key_case(is_array($response) ? $response : \Uploadcare\Helper::parseHttpHeaders($response), CASE_LOWER); }
/** * Run raw request to REST. * * @param string $method Request method: GET, POST, HEAD, OPTIONS, PUT, etc * @param string $path Path to request * @param array $data Array of data to send. * @param array $headers Additional headers. * @return object * @throws \Exception */ public function request($method, $path, $data = array(), $headers = array()) { $ch = curl_init(sprintf('https://%s%s', $this->api_host, $path)); $this->__setRequestType($ch, $method); $this->__setHeaders($ch, $headers, $data); $response = curl_exec($ch); if ($response === false) { throw new \Exception(curl_error($ch)); } $ch_info = curl_getinfo($ch); $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size); $body = substr($response, $header_size); $error = false; if ($method == 'DELETE') { if ($ch_info['http_code'] != 302 && $ch_info['http_code'] != 200) { $error = true; } } else { if (!($ch_info['http_code'] >= 200 && $ch_info['http_code'] < 300)) { $error = true; } } if ($ch_info['http_code'] == 429) { $exception = new ThrottledRequestException(); $response_headers = Helper::parseHttpHeaders($header); $exception->setResponseHeaders($response_headers); throw $exception; } if ($error) { $errorInfo = array_filter(array(curl_error($ch), $body)); throw new \Exception('Request returned unexpected http code ' . $ch_info['http_code'] . '. ' . join(', ', $errorInfo)); } curl_close($ch); if (!defined('PHPUNIT_UPLOADCARE_TESTSUITE') && ($this->public_key == 'demopublickey' || $this->secret_key == 'demoprivatekey')) { trigger_error('You are using the demo account. Please get an Uploadcare account at https://uploadcare.com/accounts/create/', E_USER_WARNING); } return json_decode($body); }