[function.fsockopen]: unable to connect to

Discussion in 'PHP' started by попугай, 3 Jan 2010.

  1. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    Напейсал быдлоскрипт, который логинится на одном сайте, а затем в цикле - качает страницу, парсит ссылку на ней при помощи preg_match, качает её.

    через некоторое время скрипт вылетает с такой ошибкой, что типа не может приконектится.

    Скрипт запускается на VDSе (причем пробовал уже на трех - везде такая фигня), целевой сайт тормозить не может - он довольно крупный (соц сеть средней крупности).



    Что делать? В чем может быть проблема? Как решить её?
     
  2. Deathdreams

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

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Античат - форум экстрасенсов.

    Может выложишь скрипт, тебе тогда и помогут.
     
  3. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196

    Даже не знаю. Впринципе возможно такое. Но я вроде и реферрер шлю и куки и UserAgent нормальный.

    index.php
    PHP:
    <?php
    set_time_limit
    (0);
    ini_set('memory_limit''256M');
    error_reporting(E_ALL);
    ini_set('display_errors'1);

    include(
    'getpost.php');

    $uza 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)';
    $acc 'login:parol';

    $bot explode(':'$acc);
    $login $bot[0];
    $parol $bot[1];



     
    ##############          Авторизация      ########################
     
        
    $authdata post('server.ru'"/script""http://google.ru/"$uza'''Login=' $login '&Password=' $parol); // запрос на авторизацию

        
    $authcooki =    getcookie($authdata); //  получение куков

        

        
        
    while(1){  // бесконечный цикл
            
            
    $gett get('server.ru''/script_start_page''http://server.ru/'$uza$authcookitrue); // получение самой первой страницы парсинга
            
    $startpage =  !isset($targetpage) ? $gett $targetpage;

                if(
    preg_match('|регулярное выражение для поиска ссылки|'$startpage$link)){

                
                
    $targetpage get('server.ru'$link[1], 'http://server.ru/'$uza$authcookitrue); // переход по нужной мне ссылке
                
    unset($link);
        }
        
    }
        
        
        

        
    ?>

    getpost.php

    PHP:
    <?php



        
    function getlocation($str){
        
            
    preg_match("%Location: (\S+)%i"$str$locat);
            
                    
    $url parse_url($locat[1]);
                    
            return 
    $url['path'] . '?' $url['query'];
        }
        


    function 
    get($host$path$ref$ua$cook$dwnld true)
    {
        
    $line="";
        
    $fp=fsockopen($host80$errno$errstr10);
            if(!
    $fp){
            die(
    $errstr($errno));
            }else{
                    
    $headers "GET $path HTTP/1.1\r\n";
                    
    $headers .="Host: $host\r\n";
                    
    $headers .="User-Agent: $ua\r\n";
                    
    $headers .="Accept-Language: ru,ru-RU;q=0.9,en;q=0.8\r\n";
                    
    $headers .="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
                    
    $headers .="Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
                    
    $headers .="Referer: $ref\r\n";
                    
    $headers .="Cookie: $cook\r\n";
                    
    $headers .="Connection: Close\r\n\r\n";

                    
                    
    fwrite($fp$headers);
                    
                    if(
    $dwnld == true){
                        while(!
    feof($fp)){
                                
                            
    $line .= fgets($fp4096);
                        }
                    }
            }        
                    
    fclose($fp);


        return 
    $line;
    }

    function 
    post($host$script$ref$ua$cook$cont){
    $respons="";
    $postsock fsockopen($host80$errno$errstr10);
    if (!
    $postsock) echo $errstr($errno);
    else
    {
    $head "POST $script HTTP/1.1\r\n";
    $head .= "Host: $host\r\n";
    $head .= "User-Agent: $ua\r\n";
    $head .= "Accept-Language: ru,ru-RU;q=0.9,en;q=0.8\r\n";
    $head .= "Connection: close\r\n";
    $head .= "Referer: $ref\r\n";
    $head .= "Cookie: $cook\r\n";
    $head .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $head .= "Content-Length: " .strlen($cont). "\r\n";
    $head .= "\r\n$cont\r\n";
    fwrite($postsock$head);
    while(!
    feof($postsock)){
    $respons .= fgets($postsock4048);
    }
    fclose($postsock);
    }
    return 
    $respons;
    }


        function 
    getcookie($str){
            
    $authcooki '';
            
    preg_match_all('/Set-Cookie:\s([^;]+)/i'$str$temp);
            
    $temp[1] = array_unique($temp[1]);
            foreach(
    $temp[1] as $cook){
            
    $authcooki .= $cook '; ';
            }
            return 
    $authcooki;
        }


    ?>
     
  4. Deathdreams

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

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Скрипт выполняется на хостинге?
    Попробуй простое подключение к гуглу,
    PHP:
    if(fsockopen('google.ru'80)) {  echo 'good'; } else { echo 'bad'; }
     
  5. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196

    Да естественно, коннект есть, все работает - читай первый пост. Проблема в том, что скрипт после нескольких десятков итераций глохнет с warning-ом.
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    попугай Поставьте задержки при переходе на страницу. Скорее всего блочат по превышению количества запросов в минуту.

    Ну или просто - не останавливайте скрипт по ошибке (заглушив ошибку с помощью @ и убрав die(); ), а повторяйте текущий запрос после задержкт
     
    _________________________
  7. gr[e]y

    gr[e]y New Member

    Joined:
    12 May 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    ребята, у меня такая же ошибка возникла. причём это произошло после переноса обоих сайтов (и того на котором скрипт и того к которому скрипт подключается) на новый впс. в чём может быть проблема?
    PHP:
    if(fsockopen('google.ru'80)) { echo 'good'; } else { echo 'bad'; }
    - возвращает good

    PHP:
    if(fsockopen('mysite.ru'80)) { echo 'good'; } else { echo 'bad'; }
    - возвращает bad
     
    #7 gr[e]y, 16 May 2010
    Last edited: 16 May 2010