Пример работы с cURL

Тема в разделе 'PHP', создана пользователем RooTM, 5 июн 2011.

  1. RooTM Administrator

    cURL — это свободная, кроссплатформенная служебная программа/библиотека для передачи файлов по различным протоколам с синтаксисом URL. Официальный сайт: , с полной документацией и самим продуктом.

    Основные функции для работы с cURL в php:
    curl_close — закрыть сессию работы с cURL
    curl_copy_handle — Скопировать cURL handler вместе с правилами
    curl_errno — вернуть номер ошибки
    curl_error — вернуть текстовое описание ошибки
    curl_exec — выполнить cURL запрос
    curl_getinfo — вернуть информацию о результате работы cURL
    curl_init — инициализация объекта cURL
    curl_multi_add_handle — добавить обычную сессию cURL, в многопоточную
    curl_multi_close — закрыть многопоточную сессию
    curl_multi_exec — выполнить многопоточную сессию cURL
    curl_multi_getcontent — вернуть контент cURL запроса, если CURLOPT_RETURNTRANSFER == true
    curl_multi_info_read — вернуть информацию о текущем состоянии многопоточного запроса
    curl_multi_init — инициализация объекта cURL для многопоточного запроса
    curl_multi_remove_handle — удалить обычную сессию cURL из многопоточного запроса
    curl_multi_select — ожидать активность от любого потока в многопоточном cURL запросе
    curl_setopt_array — задать набор опций cURL запроса в виде массива
    curl_setopt — задать одну опцию cURL запроса
    curl_version — вернуть версию cURL

    Порядок использования:
    1.сначала создаём cURL объект – функция curl_init
    2.затем задаём параметры для запроса – функции curl_setopt_array и/или curl_setopt
    3.выполняем запрос и забираем данные – curl_exec

    А теперь три самых частых варианта использования cURL в php:

    1. пример cURL скрипта с авторизацией
    PHP:
    <?
    $newThread curl_init();
    curl_setopt_array($newThread, array(
            
    CURLOPT_URL            => 'http://mydomain.com/login/',
            
    CURLOPT_CONNECTTIMEOUT => 1,
            
    CURLOPT_FOLLOWLOCATION => 1,
            
    CURLOPT_TIMEOUT        => 10,
            
    CURLOPT_POST           => 1,
            
    CURLOPT_POSTFIELDS     => 'login=mylogin&pass=mypass'// тут POST,
            // который идёт от браузера к серверу
            
    CURLOPT_COOKIEFILE     => dirname(__FILE__).'/cook1.txt',
            
    CURLOPT_COOKIEJAR      => dirname(__FILE__).'/cook1.txt',
        )
    );
    curl_exec($newThread);
    curl_setopt_array($newThread, array(
            
    CURLOPT_URL            => 'http://mydomain.com/secretPage/',
            
    CURLOPT_CONNECTTIMEOUT => 1,
            
    CURLOPT_FOLLOWLOCATION => 1,
            
    CURLOPT_TIMEOUT        => 10,
            
    CURLOPT_COOKIEFILE     => dirname(__FILE__).'/cook1.txt',
            
    CURLOPT_COOKIEJAR      => dirname(__FILE__).'/cook1.txt',
        )
    );
    $data curl_exec($newThread);
    2. пример многопоточного скрипта
    PHP:
    <?
    set_time_limit(0);
    ini_set('error_reporting'E_ALL);
    ini_set('log_errors''1');
    ini_set('display_errors''1');
    $allUseragents = array(
        
    "Opera/9.23 (Windows NT 5.1; U; ru)",
        
    // ну и много всяких, сколько найдёте
    );
    $links = array(
        
    'http://mydomain.com/',
        
    // много ссылок, иногда так надо,
        // обычно в таких случаях и применяется многопоточный курл
    );
    $maxThreads 10// скачивать будем в десять потоков
    $multicurlInit curl_multi_init();
    do
    {
        while(@
    $active <= $maxThreads)
        {
            @
    $active++;
            if(
    count($links) == 0)
                break;
            
    $idLink array_rand($links);
            
    $link $links[$idLink];
            unset(
    $links[$idLink]);
            
    $agent $allUseragents[array_rand($allUseragents)];
            
    $newThread curl_init();
            
    curl_setopt_array($newThread, array(
                    
    CURLOPT_URL            => $link,
                    
    CURLOPT_RETURNTRANSFER => true,
                    
    CURLOPT_CONNECTTIMEOUT => 10,
                    
    CURLOPT_TIMEOUT        => 100,
                    
    CURLOPT_USERAGENT      => $agent,
                    
    CURLOPT_FAILONERROR    => false,
                )
            );
            
    curl_multi_add_handle($multicurlInit$newThread);
            unset(
    $newThread);
        }
        
    $curlMultiResult curl_multi_exec($multicurlInit$active);
        do
        {
            
    $result curl_multi_info_read($multicurlInit);
            if( ! 
    is_array($result))
                break;
            
    $info curl_getinfo($result['handle']);
            print 
    curl_multi_getcontent($result['handle']);
            
    print_r($info);
            
    curl_multi_remove_handle($multicurlInit$result['handle']);
            
    curl_close($result['handle']);
        } while(
    true);
        if(
    count($links) == && $active == 0)
            break;
    } while(
    true);
    3. отправка файла с помощью cURL
    PHP:
    <?
    $newThread curl_init();
    curl_setopt_array($newThread, array(
            
    CURLOPT_URL            => 'http://mydomain.com/',
            
    CURLOPT_HEADER         => true,
            
    CURLOPT_RETURNTRANSFER => true,
            
    CURLOPT_CONNECTTIMEOUT => 1,
            
    CURLOPT_TIMEOUT        => 10,
            
    CURLOPT_FAILONERROR    => false,
            
    CURLOPT_POST           => true,
        )
    );
    $post = array(
        
    "file_box"=>"@/path/to/myfile.txt",
    );
    curl_setopt($newThreadCURLOPT_POSTFIELDS$post);
    $response curl_exec($newThread);

Поделиться этой страницей