Ищу рабочий чекер proxy на php??

Discussion in 'PHP' started by Zombi ****, 7 Sep 2010.

  1. Zombi ****

    Zombi **** Elder - Старейшина

    Joined:
    4 Apr 2009
    Messages:
    166
    Likes Received:
    183
    Reputations:
    17
    Ищу рабочий чекер proxy на php? не курл
     
  2. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    дак курл то как раз ненужен будет, нужен будет фсокопен
     
  3. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    function checkit($ip,$port)
    {
    $connect = @fsockopen ($ip,$port, $errno, $errstr, 5);
    if($connect)
    return TRUE;
    else
    return FALSE;
    }
    но с сокетами только в 1 поток, а с курлом можно юзать мультизапросы - намного быстрее будет...
     
    #3 phpdreamer, 7 Sep 2010
    Last edited: 7 Sep 2010
    1 person likes this.
  4. Failure

    Failure Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    заюзай функцию с аргументами antichat.ru, 80, ачат тоже прокся? :)
    если ты про курловую мультитридинг - то это лишь жалка эмуляция которая скорости не прибавит, ну разве что на понты, в пыхе 4/5 нет ни многозадачности ни многопоточности
     
  5. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    php в смеси из ajax - полноценная многопоточность ;)
    а в чистом пхп - согласен,не было и не буит)
     
  6. Zombi ****

    Zombi **** Elder - Старейшина

    Joined:
    4 Apr 2009
    Messages:
    166
    Likes Received:
    183
    Reputations:
    17
    PHP:
    <?php 
    set_time_limit
    (0);
    //error_reporting(1);
    //ignore_user_abort(true);

    $data 'proxiesdub.txt';
    $good 'good.txt';
    $bad 'bad.txt';

    $dataFile file($data);
    $g fopen($good'a+');
    $b fopen($bad'a+');

    if(!
    $dataFile )
    {
        
    fwrite($b,"can't read accounts file\n");
        die();
    }


    function 
    checkit($ip,$port)
    {
    $connect fsockopen ($ip,$port$errno$errstr,20);
    if(
    $connect)
    return 
    TRUE;
    else
    return 
    FALSE;
    }


    foreach(
    $dataFile as $account)
    {
        
    $explode_ explode(':',$account);

        
    $ip trim($explode_['0']);
        
    $port trim($explode_['1']);

        if(
    checkit($ip,$port))
            
    fwrite($g,"$ip:$port\r\n");
        else
            
    fwrite($b,"$ip:$port\r\n");
    }

    fclose($g);
    fclose($b);

    ?>
    надоело ждать наваял сам!вроде работает, прошу высказать свое мнение насчет кода.
     
    #6 Zombi ****, 7 Sep 2010
    Last edited by a moderator: 8 Sep 2010
  7. Failure

    Failure Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    Ну о аяксе, сама аббревиатура говорит о том что многопоточность имеет место быть, но это по аналогу с
    Code:
    sh$ php script.php | php script.php #считать что это 2 потока
    
    но можно обойтись и не блокируемыми сокетами
    ченить типа
    Code:
    stream_socket_client($url.":".$port, $errno, $errstr, 10, STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
    
    В варианте выше будет создано 2 процесса (уж извиняйте, в моём понимании поток - это то легкий,lightweight, процесс), а в первом 1 процесс.

    Тем не мение не сказал бы что одно лучше второго, не для этого пхп создан как бы.

    функция checkit пропусти в гуд любой хост который откликнется через 1 сек, как я писал это в посте #3. А вообще код так себе, опять таки - пых не для этого создан, при большом к-ве проксей будет оч долго, а при очень большом ( :D ) просто не откроется файл, если конечно не делать всяких ini_set("memoty_limit", "100500M");
     
    #7 Failure, 8 Sep 2010
    Last edited: 8 Sep 2010
  8. Zombi ****

    Zombi **** Elder - Старейшина

    Joined:
    4 Apr 2009
    Messages:
    166
    Likes Received:
    183
    Reputations:
    17
    Функция fsockopen предназначена для соединения клиента с сервером. Она очень удобна, поскольку является универсальной и объединяет в себе те функции, которые есть в PHP для работы с сокетами. Функция имеет следующий синтаксис:

    int fsockopen (string target, int port [, int errno [, string errstr
    [, float timeout]]])

    Первый аргумент функции представляет собой URL хоста target, с которым необходимо соединиться, второй — номер порта port по которому произойдет соединение. Необязательный аргумент errno указывает на номер ошибки, а errstr содержит текст сообщения об ошибке. Аргумент timeout позволяет указать количество секунд, в течение которого устанавливается соединение.

    так таймаут тогда для чего ??
     
  9. Failure

    Failure Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    ты не понял, соединение произойдет с любым хостом, и он полетит в гуд, проверять на коннект - мало, ведь не факт что после отправки хттп запроса ты получишь то что надо
    вот попробуй отправь
    Code:
    # telnet antichat.ru 80
    //ура, есть коннект, fsockopen отработает и ачат попадает в гуд
    GET / HTTP/1.1
    Host: mail.ru
    
    //и тут жопа, вместо майл ру,мы конечно же получим ответ мол такого хоста на сервере нет
    
    по этому надо проверять ответ, что бы наверняка убеждатся что это прокся, а не просто сайтик
     
  10. Zombi ****

    Zombi **** Elder - Старейшина

    Joined:
    4 Apr 2009
    Messages:
    166
    Likes Received:
    183
    Reputations:
    17
    приведи более конкретный пример.
     
  11. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    PHP:
    <?php
    $proxys 
    file('proxy.txt');
    $proxys array_map('trim',$proxys);


    list(
    $proxy$port) = explode(':',$proxys[2]);

    echo 
    'USE PROXY: '.$proxy.':'.$port.'<br><hr>';


    $fp = @fsockopen($proxy$port$errno$errstr5);
    if (!
    $fp) {
        echo 
    "$errstr ($errno)<br />\n";
    } else {
        
    $out "GET / HTTP/1.1\r\n";
        
    $out .= "Host: ya.ru\r\n";
        
    $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8";
        
    $out .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        
    $out .= "Accept-Language: ru,en-us;q=0.7,en;q=0.3";
        
    $out .= "Accept-Encoding: gzip,deflate";
        
    $out .= "Connection: Close\r\n\r\n";
        
    fwrite($fp$out);
        while (!
    feof($fp)) {
            @
    $content .= fgets($fp128);
        }
        
    fclose($fp);

    list(
    $headers$body) = explode("\r\n\r\n"$content2);



    echo 
    'HEADERS:<br>'.$headers.'<hr>';
    echo 
    'BODY:<br>'.$body.'<hr>';


    }
    ?>
     
    1 person likes this.