Помогите дописать регер

Тема в разделе "Как сделать...", создана пользователем Yyury2, 4 окт 2009.

Статус темы:
Закрыта.
  1. Yyury2

    Yyury2 Создатель

    Регистр.:
    9 июл 2008
    Сообщения:
    31
    Симпатии:
    13
    На античате увидел полуавтоматический регер акков на закладочнике
    moemesto.ru. Ccылка:http://www.forum.antichat.ru/threadnav137671-3-10.html
    как оказалось это просто кусок кода где вводится капча. Я решил его доработать до полноценного регера с антикапчей
    У меня получилось вот что:
    PHP:
    <?php
    @set_time_limit(0);
    //-----------------//
    $accounts 'accounts.txt'// Файл для сохранения аккаунтов
    $divider  ':';           // Раздеитель 
    $apikey ''// Антикапча ключ
    //-----------------//
           
    function post($url,$post,$refer)
        {
           
    $ch curl_init($url);
           
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
           
    curl_setopt($chCURLOPT_POST1);
           
    curl_setopt($chCURLOPT_POSTFIELDS$post);
           
    curl_setopt($chCURLOPT_REFERER$refer);
           
    curl_setopt($chCURLOPT_COOKIEJAR"./cook1");
           
    curl_setopt($chCURLOPT_COOKIEFILE"./cook1");
           
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
           
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
           
    $result  curl_exec($ch);
           return 
    $result;
        }
     function 
    recognize($filename$apikey$is_verbose true$rtimeout 5$mtimeout 120$is_phrase 0$is_regsense 1$is_numeric 0$min_len 0$max_len 0)
      {
        if (!
    file_exists($filename))
        {
            if (
    $is_verbose) echo "file $filename not found\n";
            return 
    false;
        }
        
    $postdata = array(
            
    'method'    => 'post'
            
    'key'       => $apikey
            
    'file'      => '@'.$filename//
            
    'phrase'    => $is_phrase,
            
    'regsense'    => $is_regsense,
            
    'numeric'    => $is_numeric,
            
    'min_len'    => $min_len,
            
    'max_len'    => $max_len,
        );
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL,             'http://antigate.com/in.php');
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,     1);
        
    curl_setopt($chCURLOPT_TIMEOUT,             60);
        
    curl_setopt($chCURLOPT_POST,                 1);
        
    curl_setopt($chCURLOPT_POSTFIELDS,         $postdata);
        
    $result curl_exec($ch);
        if (
    curl_errno($ch)) 
        {
            if (
    $is_verbose) echo "CURL returned error: ".curl_error($ch)."\n";
            return 
    false;
        }
        
    curl_close($ch);
        if (
    strpos($result"ERROR")!==false)
        {
            if (
    $is_verbose) echo "server returned error: $result\n";
            return 
    false;
        }
        else
        {
            
    $ex explode("|"$result);
            
    $captcha_id $ex[1];
            if (
    $is_verbose) echo "captcha sent, got captcha ID $captcha_id\n";
            
    $waittime 0;
            if (
    $is_verbose) echo "waiting for $rtimeout seconds\n";
            
    sleep($rtimeout);
            while(
    true)
            {
                
    $result file_get_contents('http://antigate.com/res.php?key='.$apikey.'&action=get&id='.$captcha_id);
                if (
    strpos($result'ERROR')!==false)
                {
                    if (
    $is_verbose) echo "server returned error: $result\n";
                    return 
    false;
                }
                if (
    $result=="CAPCHA_NOT_READY")
                {
                    if (
    $is_verbose) echo "captcha is not ready yet\n";
                    
    $waittime += $rtimeout;
                    if (
    $waittime>$mtimeout
                    {
                        if (
    $is_verbose) echo "timelimit ($mtimeout) hit\n";
                        break;
                    }
                    if (
    $is_verbose) echo "waiting for $rtimeout seconds\n";
                    
    sleep($rtimeout);
                }
                else
                {
                    
    $ex explode('|'$result);
                    if (
    trim($ex[0])=='OK') return trim($ex[1]);
                }
            }
            return 
    false;
        }
    }
    function 
    getLogin()
    {
        return 
    getRandText(511,0);
    }
    function 
    getRandText($min=8$max=9$mustint=0)
    {
        
    $count rand($min,$max);
        
    $mg = array ("a""s""d""w""f","w""e""f""j, "g", "e", "b", "a", "m", "d", "e", "f", "h", "g");
        shuffle(
    $mg);
        
    $text = implode('',$mg);
        
    $text = substr($text,0,$count);
        return 
    $text;
    }
     for (
    $r = 0; $r <= $ammount$r++)
     {      
          
    $login = getLogin();
          
    $password = rand(111111,7777777);
     
    $text=recognize(getcwd()."/captcha.jpg",$apikey,false);
    $result = post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$login.'&email='.$login.'@gmail.com&password='.$password.'&captcha='.$text.'&do_reg=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%  D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1  %8C%D1%81%D1%8F','http://moemesto.ru/register/?from=button');
          
    $result = iconv("UTF-8","Windows-1251",$result);
          
    $fh = fopen($accounts, "a+");
            
    $success - fwrite($fh$_POST['login'].$divider.$_POST['password']."\r\n");
                fclose(
    $fh);
              
    $result = post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
        preg_match('#id" 
    value="(.*?)"#i',$result,$captchaid);
        
    }
    ?> 
    Но работает неправильно. то есть акки создаются, но нерабочие. Логин, пароль создаются, капча отсылается и распознается. Но при попытке зайти под этими логинами-паролями оно пишет что такой незарегестрирован. Знаю что ошибка где-то здесь
    $result = post('http:.............
    Но где? Там регистрация легкая - не требуется подтверждение по e-mail Подскажите чайнику, плиз
     
  2. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    какой результат вы получаете после отправки данных?
     
  3. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    судя по куску кода у тебя не закрыта кавычка
    это даже в местном обрамлении видно.
    Исправь и проверь

    а заменив
    Код:
    $result = iconv("UTF-8","Windows-1251",$result); 
    
    на
    Код:
    $result = iconv("UTF-8","Windows-1251",$result);
     echo $result;
    
    ты сможешь смотреть что выдает сервис при регистрации


    у меня упорно получалось "Защитный код не меньше 4 символов" -- тут либо сервис перегружен, либо нарвался на халявщика
    в любом случае -- рекомендую при работе с антикапчей ужесточать тревобания к распознаваемой картинке
    в данном случае -- укажи что не меньше 4 символов

    ну и смотреть что отвечает антикапча тоже полезно
    это я про

    на вскидку посмотри сначала это



    PS советую все таки пользоваться редакторами с нормальной подстветкой кода
     
    Yyury2 нравится это.
  4. Yyury2

    Yyury2 Создатель

    Регистр.:
    9 июл 2008
    Сообщения:
    31
    Симпатии:
    13
    Заменил строчку
    $result = iconv("UTF-8","Windows-1251",$result);
    echo $result;

    В результате: "неправильно введена капча" В моем аккаунте в антикапче в разделе "Распознавание" рядом с картинкой символы распознавания. Ну то есть картинка 34789 и цифры тоже 34789, то есть все верно -- картинка распознана верно. Но видимо отослана НЕ ТА картнка. А как отослать ТУ!! :thenks:
    Как выдрать картинку отсюда http://moemesto.ru/captcha/ergerthth и отослать ее на антикапчу?

    Приведу пример с рекапчей и live-журналом и код с комментариями с того же античата:

    $reg = // страница регистрации с капчей //
    preg_match('#challenge\?k=(.*?)"#i',$reg,$captcha);
    preg_match('#th" value="(.*?)"#i',$reg,$lj_form_auth);
    $reg = post('http://api.recaptcha.net/challenge?k='.$captcha[1],null,'https://www.livejournal.com/',$proxy[$r]);
    preg_match('#\'(.*?)\'#i',$reg,$captcha);
    // сохраняем картинку //
    file_put_contents('captcha.jpg', post('http://api.recaptcha.net/image?c='.$captcha[1],null,'https://www.livejournal.com/',$proxy[$r]));
    // распознаём её // $text=recognize(getcwd()."/captcha.jpg",$apikey,false);
    // geforse.name //

    В остальном у меня все верно - логин-пасс генерится и ложится в форму как надо и фейковый е-майл тоже

    Так вот по аналогии как с этой капчей поступить?
     
  5. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    если ты регишь аккаунты в цикле
    Код:
     
    for ($r = 0; $r <= $ammount; $r++) 
     {       
          $login = getLogin(); 
          $password = rand(111111,7777777); 
     $text=recognize(getcwd()."/captcha.jpg",$apikey,false); 
    $result = post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$login.'&email='.$login.'@gmail.com&password='.$password.'&captcha='.$text.'&do_reg=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%  D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1  %8C%D1%81%D1%8F','http://moemesto.ru/register/?from=button'); 
          $result = iconv("UTF-8","Windows-1251",$result); 
          $fh = fopen($accounts, "a+"); 
            $success - fwrite($fh, $_POST['login'].$divider.$_POST['password']."rn"); 
                fclose($fh); 
              $result = post('http://moemesto.ru/register/',null,'http://moemesto.ru/'); 
        preg_match('#id" value="(.*?)"#i',$result,$captchaid); 
        }
    
    то у тебя банально не запрашивается картинка.
    Т.е. ( на глаз ) ты каждый раз распознаешь одну и ту же капчу, получаешь один и тот же результат и отправляешь его серверу

    перед
    $text=recognize(getcwd()."/captcha.jpg",$apikey,false);
    запрашивай капчу каждый раз, и заново сохраняй в файл. Причем рекомендую запрашивать ее именно через курл, т.к. скорее всего значение в сессии записывается ( т.е. file() file_get_contents() не годятся )

    И еще на форуме режит регер акков для закладочника ( название не помню ) -- посмотри там пример



    PS Код ужасный
     
Статус темы:
Закрыта.