_max_redirects = $max; } public function set_timeout($timeout) { $this->_timeout = $timeout; } public function get($url, $headers=[]) { $ch = curl_init($url); $this->_set_curlopts($ch, $url); if($headers) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header_str = trim(substr($response, 0, $header_size)); return array( 'code' => curl_getinfo($ch, CURLINFO_HTTP_CODE), 'header' => $header_str, 'body' => substr($response, $header_size), 'error' => self::error_string_from_code(curl_errno($ch)), 'error_description' => curl_error($ch), 'url' => curl_getinfo($ch, CURLINFO_EFFECTIVE_URL), 'debug' => $response ); } public function post($url, $body, $headers=[]) { $ch = curl_init($url); $this->_set_curlopts($ch, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $body); if($headers) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header_str = trim(substr($response, 0, $header_size)); return array( 'code' => curl_getinfo($ch, CURLINFO_HTTP_CODE), 'header' => $header_str, 'body' => substr($response, $header_size), 'error' => self::error_string_from_code(curl_errno($ch)), 'error_description' => curl_error($ch), 'url' => curl_getinfo($ch, CURLINFO_EFFECTIVE_URL), 'debug' => $response ); } public function head($url) { $ch = curl_init($url); $this->_set_curlopts($ch, $url); curl_setopt($ch, CURLOPT_NOBODY, true); $response = curl_exec($ch); return array( 'code' => curl_getinfo($ch, CURLINFO_HTTP_CODE), 'header' => trim($response), 'error' => self::error_string_from_code(curl_errno($ch)), 'error_description' => curl_error($ch), 'url' => curl_getinfo($ch, CURLINFO_EFFECTIVE_URL), 'debug' => $response ); } private function _set_curlopts($ch, $url) { curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, $this->_max_redirects); curl_setopt($ch, CURLOPT_TIMEOUT_MS, round($this->_timeout * 1000)); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 2000); } public static function error_string_from_code($code) { switch($code) { case 0: return ''; case CURLE_COULDNT_RESOLVE_HOST: return 'dns_error'; case CURLE_COULDNT_CONNECT: return 'connect_error'; case CURLE_OPERATION_TIMEDOUT: return 'timeout'; case CURLE_SSL_CONNECT_ERROR: return 'ssl_error'; case CURLE_SSL_CERTPROBLEM: return 'ssl_cert_error'; case CURLE_SSL_CIPHER: return 'ssl_unsupported_cipher'; case CURLE_SSL_CACERT: return 'ssl_cert_error'; case CURLE_TOO_MANY_REDIRECTS: return 'too_many_redirects'; default: return 'unknown'; } } }