<?php class Curl { private $_connection; private $_response; public function __construct(string $url, mixed $userAgent = false, int $connectTimeout = 10, bool $header = false, bool $followLocation = false, int $maxRedirects = 10) { $this->_connection = curl_init($url); if ($header) { curl_setopt($this->_connection, CURLOPT_HEADER, true); } if ($followLocation) { curl_setopt($this->_connection, CURLOPT_FOLLOWLOCATION, true); curl_setopt($this->_connection, CURLOPT_MAXREDIRS, $maxRedirects); } curl_setopt($this->_connection, CURLOPT_RETURNTRANSFER, true); curl_setopt($this->_connection, CURLOPT_CONNECTTIMEOUT, $connectTimeout); // skip resources with long time response curl_setopt($this->_connection, CURLOPT_TIMEOUT, $connectTimeout); // prevent infinitive connection on streaming resources detected @TODO curl_setopt($this->_connection, CURLOPT_NOPROGRESS, false); curl_setopt($this->_connection, CURLOPT_PROGRESSFUNCTION, function( $downloadSize, $downloaded, $uploadSize, $uploaded ){ return ($downloaded > CRAWL_CURLOPT_PROGRESSFUNCTION_DOWNLOAD_SIZE_LIMIT) ? 1 : 0; }); if ($userAgent) { curl_setopt($this->_connection, CURLOPT_USERAGENT, (string) $userAgent); } $this->_response = curl_exec($this->_connection); } public function __destruct() { curl_close($this->_connection); } public function getError() { if (curl_errno($this->_connection)) { return curl_errno($this->_connection); } else { return false; } } public function getCode() { return curl_getinfo($this->_connection, CURLINFO_HTTP_CODE); } public function getContentType() { return curl_getinfo($this->_connection, CURLINFO_CONTENT_TYPE); } public function getSizeDownload() { return curl_getinfo($this->_connection, CURLINFO_SIZE_DOWNLOAD); } public function getSizeRequest() { return curl_getinfo($this->_connection, CURLINFO_REQUEST_SIZE); } public function getTotalTime() { return curl_getinfo($this->_connection, CURLINFO_TOTAL_TIME_T); } public function getContent() { return $this->_response; } }