Прикрутить прокси к PHP скрипту

Тема в разделе "PHP", создана пользователем zek24, 8 май 2012.

Статус темы:
Закрыта.
Модераторы: latteo
  1. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    776
    Симпатии:
    230
    Приветствую,
    пробую написать простенький парсер яндекс выдачи.
    Т.к. запросов будет много и для личного опыта, решил прикрутить прокси.
    Список прокси имеется.
    Подскажите в какую сторону копать...

    скрипт берет из тхт построчно домены и проверяет их ТИЦ
    PHP:
    $homepage file_get_contents("http://yaca.yandex.ua/yca/cy/ch/$domen/");
    потом при помощи preg_match получаю нужную цифру из контента загруженной страницы
    Т.к. кол-во запросов может быть более 1000, то ставлю паузу (2-4с), но это явно не идет на пользу скорости.
    Сам скрипт пишу для себя, для практики и радует, что он работает, но без прокси он явно не имеет будущего.
    Вот и решил узнать как их можно использовать.
    Как-то так.
     
  2. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    :)
    судя по комментариям к официальному мануалу, http://ru2.php.net/manual/ru/function.file-get-contents.php#58758 можно сделать так:
    PHP:
    <?php
     
    // Define a context for HTTP.
    $aContext = array(
    'http' => array(
    'proxy' => 'tcp://127.0.0.1:8080'// This needs to be the server and the port of the NTLM Authentication Proxy Server.
    'request_fulluri' => True,
    ),
    );
    $cxContext stream_context_create($aContext);
     
    // Now all file stream functions can use this context.
     
    $sFile file_get_contents("http://www.php.net"False$cxContext);
     
    echo 
    $sFile;
    ?>
    однако, некоторые предупреждают, что такой способ нельзя использовать для получения страниц по https-протоколу
     
    zek24 и DrakonHaSh нравится это.
  3. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    Есть такая вот отличкая штука, как http://sourceforge.net/projects/snoopy/, которая умеет ходить через https через прокси, рекомендовал бы использовать ее вместо сокетов, и для увичения скорость парсинга, распаралель скрипт на потоки, читать тут. Либо же используй многопоточный курл.
     
    Extalionez нравится это.
  4. 868283

    868283 Писатель

    Регистр.:
    7 май 2012
    Сообщения:
    3
    Симпатии:
    1
    Предлагаю рассмотреть вариант парсить яндекс через phpQuery вариант на http://habrahabr.ru/post/69149/ официальный блог http://phpquery-library.blogspot.com/
     
  5. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    А CURL уже отменили?
    Буквально на недели писал скрипт где пропарсивал http://yaca.yandex.ua/yca/cy/ch/***/, файл доменов примерно в мегабайт, скрипт прошел без проксей, так что надо ли использовать прокси. Стаяла задержка 3-5 секунд.

    На курле все ок, если надо прокси просто добавляешь пару параметров.
     
  6. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    776
    Симпатии:
    230
    Парсер пишу не ради парсера, а больше чтобы руку набить. Так сказать применить знания на практике.
    К сожаление не знаком с курлом, а толковых мануалов так и не нашел. Был бы благодарен за информацию, где можно достать подробное описание, как работать с курл. Пока читаю ПХП мануал - но там скудное описание.
     
  7. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    Это ж как так искать то нужно, что бы про курл не найти? Относительно курла документации просто огромное кол-во. Например:

    неплохая статейка по curl: http://php.su/articles/?cat=protocols&page=004
    описание функций курла: http://php.su/functions/?cat=curl
    описание некоторых констант курла: http://php.su/functions/?curl-setopt

    собсно все, этого должно с головой хватить для начала работы.
     
  8. bog.imp

    bog.imp Постоялец

    Регистр.:
    22 ноя 2008
    Сообщения:
    89
    Симпатии:
    6
    К примеру рабочий скрипт накрутки polldaddy.com через список проксей

    PHP:
    $proxys=array();
    //читаем список проксей с файла
    // формат "ip\tport\t"
    $handle2 fopen('proxy.txt'"r");
    if (
    $handle2)
    {
        while (!
    feof($handle2))
        {
            
    $buffer fgets($handle24096);
            
    $buffera explode("\t"$buffer);
            
    $ssss $buffera[0].":".$buffera[1];   
        }
        
    fclose($handle2);
    }
    // проверяем что у нас
    //var_dump($proxys);die();
     
    // для простоти и дебага
        
    function simple_get($ch$url$proxy$headers=null)
        {
            
    //echo "<br>GET: $url";
            
    curl_setopt($ch,  CURLOPT_URL$url);
            
    $result curl_exec ($ch);
            
    //echo "<br/>Return:<textarea style='width:100%; height:300px'>$result</textarea>";
            
    return $result;
        }
    //
    // набор простих хидеров
    //
    $headers = array(
      
    "Accept:*/*",
      
    "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3",
      
    "Accept-Encoding:gzip,deflate,sdch",
      
    "Accept-Language:en-US,en;q=0.8,ru;q=0.6"
    );
    //
    //проходим по всех проксях
    //
    $ccc count($proxys)-1;
    //
    $url "http://polls.polldaddy.com/vote-js.php?p=<тут нужно Poll ID>&b=2&a=<тут нужен Anser ID>,&o=&va=0&cookie=0&url=".urlencode("<тут нужен сайт откуда голосовать, к примеру где вставлен Poll>")."&n=";
    // ету строчку ви сможете найти когда делаете Vote
    $url2 "http://polldaddy.com/n/aa2404e3c5dd25d7deaa798e46d9cf66/XXXXXXXX?1336929939273";
     
     
    $total_vote 0;
    $total_num 0;
     
    for(
    $i=0$i<$ccc;$i++)
    {
        
    $proxy $proxys[$i];
        echo 
    "$proxy <br>";
    //
    // часть исползование curl и proxy
    //
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_HTTPHEADER$headers);
        
    curl_setopt($chCURLOPT_TIMEOUT3);
        
    curl_setopt($chCURLOPT_HEADER1);
     
        
    curl_setopt($chCURLOPT_PROXY$proxy);
        
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13");
        
    curl_setopt($chCURLOPT_REFERER"< Рефер сайта тут >");
        
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
     
        
    //
        
    $dd1 mktime();
        
    $dd $dd1.rand(0,999);
        
    //
        
    $nonce simple_get($ch$url2.$dd$proxy);
            
    //тут нужно поосмотреть что у вас возвращает
        
    $nnn1 strpos($nonce"PDV_nXXXXXXXX='");
        
    $nnn2 strpos($nonce"';PD_voteXXXXXXXX(");
        
    $nonce substr($nonce$nnn1+14$nnn2-$nnn1-14);
        
    //
        //curl_setopt($ch,  CURLOPT_COOKIE, "PD_poll_ XXXXXXXX=".$dd1.";"); 
        //
        
    if($nnn2!== false && $nonce != "")
        {
            echo 
    "<br> Found: $nonce";
            
    $result simple_get($ch$url.$nonce$proxy);
            
    // проверяем что у нас все хорошо
            
    $nnn strpos($result"Thank you for voting");
            if(
    $nnn !== false)
            {
                
    $total_vote++;
                echo 
    ">>><BR><font color=green>Found</font>";
            }
        }
        
    $total_num++;
        
    curl_close ($ch);
    }
     
    echo 
    ">>>".$total_vote."/".$total_num." is ".(int)(100*$total_vote/$total_num)."%";
     
Статус темы:
Закрыта.