<?php
/**
*
* Файл-обертка для библиотеки cURL
*
*/
class Curl
{
const FOLLOWLOCATION = true;
const RETURNTRANSFER = true;
const AUTOREFERER = true;
const TIMEOUT = 30;
const CONNECT_TIME = 30;
public $user_agent = null;
public $proxy;
private $ch = null;
private $url = null;
private $httpheaders = [];
private $postparams = null;
private $proxy_type = null;
private $cookies = null;
public function __construct()
{
$this->ch = curl_init();
}
// Функция 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) {
if ($name == 'POST') {
$this->httpheaders[$name] = $name . ' ' . $value;
} else {
$this->httpheaders[$name] = $name . ': ' . $value;
}
}
}
// Присваемваем USER-AGENT
public function setUserAgent($user_agent = null)
{
$this->user_agent = $user_agent;
}
// Подключение прокси (HTTPS/SOCKS5)
public function setProxy($proxy_ip, $proxy_type = '')
{
$this->proxy = $proxy_ip;
$this->proxy_type = $proxy_type;
}
// Временное имя дsя cookie файла
private function nameCookies($name = null)
{
for ($i=0; $i<10; ++$i)
$name .= chr(rand(97, 122));
return $name . '.temp';
}
// Создание cookie файла
public function setFileCookies()
{
$this->cookies = $this->nameCookies();
file_put_contents($this->cookies, "");
}
// Удаление cookie файла
public function clearCookies()
{
unlink($this->cookies);
}
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->setProxyIp());
if ($this->proxy_type == 'socks5')
curl_setopt($this->ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($this->ch, CURLOPT_TIMEOUT, self::TIMEOUT);
curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, self::CONNECT_TIME);
curl_setopt($this->ch, CURLOPT_COOKIEJAR, $this->cookies); // Файл для записи cookies
curl_setopt($this->ch, CURLOPT_COOKIEFILE, $this->cookies); // Файл для чтения cookies
$response = curl_exec($this->ch);
$response = substr($response, curl_getinfo($this->ch, CURLINFO_HEADER_SIZE));
$this->postparams = null;
return $response;
}
public function __destruct()
{
curl_close($this->ch);
}
}