<?php
/**
*
* Файл-обертка для библиотеки cURL
*
*/
class Curl
{
protected static $curl; //экземпляр объекта
const FOLLOWLOCATION = true;
const RETURNTRANSFER = true;
const AUTOREFERER = true;
const TIMEOUT = 30;
const CONNECT_TIME = 30;
private $ch;
private $url = null;
private $httpheaders = [];
private $postparams = null;
private $proxy_type = null;
private $proxy = null;
public $cookies;
public $user_agent;
private function __construct()
{
$this->ch = curl_init();
}
// Запрос экземпляра класса
public static function setCurl()
{
if (is_null(self::$curl)) {
self::$curl = new self; // Создаем экземпляр класса если он не создан
}
return self::$curl;
}
// Функция POST/GET - запросов
public function post($url, $postparams = [])
{
$this->url = $url;
if (isset($postparams)) {
$this->postparams = $postparams;
}
return $this->exec();
}
// Заголовок запроса
public function addHttpheaders($headers)
{
foreach ($headers as $name => $value) {
$this->httpheaders[$name] = $name . ': ' . $value;
}
}
// Присваемваем USER-AGENT
public function setUserAgent($user_agent = null)
{
$this->user_agent = $user_agent;
}
// Подключение прокси (HTTPS/SOCKS5)
public function setProxy($proxy, $proxy_type = null)
{
$this->proxy = $proxy;
$this->proxy_type = $proxy_type;
}
// Удаление cookie файла
public function clearCookies()
{
$this->cookies = null;
}
private function exec()
{
curl_setopt($this->ch, CURLOPT_URL, $this->url);
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION , self::FOLLOWLOCATION);
curl_setopt($this->ch, CURLOPT_AUTOREFERER, self::AUTOREFERER);
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, self::RETURNTRANSFER);
curl_setopt($this->ch, CURLOPT_HEADER, true);
if ($this->postparams)
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $this->postparams);
if (count($this->httpheaders))
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $this->httpheaders);
if ($this->proxy)
curl_setopt($this->ch, CURLOPT_PROXY, $this->proxy);
if ($this->proxy_type == 'socks5')
curl_setopt($this->ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($this->ch, CURLOPT_COOKIEFILE, $this->cookies);
curl_setopt($this->ch, CURLOPT_TIMEOUT, self::TIMEOUT);
curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, self::CONNECT_TIME);
$response = curl_exec($this->ch);
$response = substr($response, curl_getinfo($this->ch, CURLINFO_HEADER_SIZE));
$this->cookies = implode("\n", curl_getinfo($this->ch, CURLINFO_COOKIELIST));
$this->postparams = null;
return $response;
}
public function __destruct()
{
curl_close($this->ch);
}
}