mirror of https://github.com/YGGverse/YGGo.git
phpyggdrasilcrawlermysqljs-lessspideralt-websphinxwebsearch-engineopen-sourcedistributedcurlparserfts5privacy-orientedsphinxsearchfederativeweb-archivepdo
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.3 KiB
90 lines
2.3 KiB
<?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; |
|
} |
|
} |