Innocent
Новичок
Добрый вечер.
Да, название темы звучит глупо.
Но, есть достаточно сложный в моем понимании класс, который работает с куками, забирает страницу и т.п.
Выглядит так:
Вопрос: как мне передать в него адрес прокси? (чтобы курл работал через множество прокси).
Прошу прощение за сумбурную постановку задачи.
Да, название темы звучит глупо.
Но, есть достаточно сложный в моем понимании класс, который работает с куками, забирает страницу и т.п.
Выглядит так:
PHP:
<?php
final class HTTP_GET
{
static private $proxy_state = false;
static private $ssl_state = false;
static private $add_header = array();
static public function enableProxy()
{
self::$proxy_state = true;
}
static public function disableProxy()
{
self::$proxy_state = false;
}
static public function enableSSL()
{
self::$ssl_state = true;
}
static public function disableSSL()
{
self::$ssl_state = false;
}
static public function request( $url )
{
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 1); // возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, UserAgent::rand()); // useragent
curl_setopt($ch, CURLOPT_REFERER, Referer::rand()); // ref
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 20); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
if(!empty(self::$add_header))
{
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept-Language: en-us,en;q=0.7,de-de;q=0.3',
'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'X-Forwarded-For: '.rand(80,224).".".rand(80,224).".".rand(80,224).".".rand(80,224),
));
}
if(self::$ssl_state == true)
{
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
#curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);
#curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,1);
//curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__)."/ca.cer");
//curl_setopt($ch,CURLOPT_SSLCERT,"$cert");
//curl_setopt($ch,CURLOPT_SSLCERTPASSWD,"$cert_pass");
}
if(self::$proxy_state)
{
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$return = curl_getinfo( $ch );
curl_close( $ch );
$return['errno'] = $err;
$return['errmsg'] = $errmsg;
$content = explode("\r\n\r\n", $content);
//...
//var_dump($content);
$return['header'] = trim(array_shift($content));
$return['content'] = trim(implode('', $content));
return $return;
}
}
?>
Прошу прощение за сумбурную постановку задачи.