Отправляем курл запросы, параметры запроса передаются через массив.
Принимаемые параметры:
- url - адрес сайта
- post - POST параметры
- useragent - Содержимое заголовка "User-Agent: ", посылаемого в HTTP-запросе.
- header - включения заголовков в вывод.
- nobody - TRUE для исключения тела ответа из вывода.
- session - указания текущему сеансу начать новую "сессию" cookies.
- follow - следование за редиректами
- TIMEOUT_MS - Максимально позволенное количество миллисекунд для выполнения cURL-функций
- CONNECTTIMEOUT - Количество миллисекунд ожидания при попытке соединения.
- cookieFile - Имя файла, в котором будут сохранены и использованы все внутренние cookies текущей передачи
- cookieHeaders - Массив устанавливаемых HTTP-заголовков, в формате array('Content-type: text/plain', 'Content-length: 100')
- cookieStr - Содержимое заголовка "Cookie: ", используемого в HTTP-запросе.
- proxy - HTTP-прокси, через который будут направляться запросы.
- iconv - смена кодировка для возвращаемого ответа

Код

function request($settings ){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $settings['url'] ); // отправляем на 
    curl_setopt($ch, CURLOPT_USERAGENT, (isset($settings['useragent'])) ? $settings['useragent'] : 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.0.2358 Yowser/2.5 Safari/537.36'); //
    curl_setopt($ch, CURLOPT_HEADER, (isset($settings['header'])) ? 1 : 0);// пустые заголовки 
    curl_setopt($ch, CURLOPT_NOBODY, (isset($settings['nobody'])) ? 1 : 0);// без тела 
    curl_setopt($ch, CURLOPT_COOKIESESSION, (isset($settings['session'])) ? 1 : 0);// новая сессия 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, (isset($settings['follow'])) ? 1 : 0); // следовать за редиректами    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить то что вернул сервер 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, (isset($settings['CONNECTTIMEOUT']) && is_numeric($settings['CONNECTTIMEOUT'])) ? $settings['CONNECTTIMEOUT'] : 5000);// CONNECTTIMEOUT
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, (isset($settings['TIMEOUT_MS']) && is_numeric($settings['TIMEOUT_MS'])) ? $settings['TIMEOUT_MS'] : 5000);//  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    if(isset($settings['cookieFile'])){ 
        curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/'.$settings['cookieFile']); // сохранять куки в файл 
        curl_setopt($ch, CURLOPT_COOKIEFILE,  dirname(__FILE__).'/'.$settings['cookieFile']); 
    } 
    if(isset($settings['cookieHeaders'])){ 
        curl_setopt ($ch, CURLOPT_HTTPHEADER, $settings['cookieHeaders']); 
    } 
    if(isset($settings['post'])){ 
        curl_setopt($ch, CURLOPT_POSTFIELDS, $settings['post']); 
        curl_setopt($ch, CURLOPT_POST, 1 ); // использовать данные в post 
    } 
    if(isset($settings['cookieStr'])){ 
        curl_setopt ($ch, CURLOPT_COOKIE, $settings['cookieStr']); 
    }     
    if(isset($settings['proxy'])){          
        $proxy = explode(':', $settings['proxy']); 
        if(isset($proxy[2],$proxy[3])){ 
            curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy[2].":".$proxy[3]);     
        } 
        curl_setopt($ch, CURLOPT_PROXY, $proxy[0].":".$proxy[1]);                     
       // curl_setopt($ch, CURLOPT_PROXY, $proxy[0]); 
       // curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]); 
    } 
    $data = curl_exec($ch); 
    if(curl_exec($ch) === false){ 
        return array('status' => false, 'body' => "Ошибка curl: ".curl_error($ch).".
Прокси: ".$proxy[0]); } if(strlen($data) < 1){ return array('status' => false, 'body' => "Пустая страница"); } curl_close($ch); if(isset($settings['iconv'])){ //iconv('windows-1251', 'UTF-8', $result); $data = iconv($settings['iconv']['from'], $settings['iconv']['to'], $data); } return array('status' => true, 'body' => $data); }

Пример

$settings = array('url' => 'http://google.com/',  
                    'post' => 'login=admin&password=pass',  
                    'cookieFile' => 'cookie.txt',  
                    'proxy' => '127.0.0.1:8080:login:password',  
                    'TIMEOUT_MS' => 5000, 
                    'iconv' => array('from' => 'windows-1251','to' => 'UTF-8')); 
$reply = request($settings);