[php] Разгадываем капчи

Тема в разделе ".:: Готовые решения", создана пользователем wolgast, 19 дек 2008.

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

    wolgast

    Регистр.:
    9 дек 2006
    Сообщения:
    289
    Симпатии:
    30
    Давай подумаем зачем оно нам нужно?! Капчами сейчас защищают практически все формы заполняемые случайными посетителями. Их используют при регистрации на форумах, регистрации ящиков.. да вообще везде. А теперь представь, что ты достал большую базу каталогов ссылок на каком-то определенном движке и там для размещения ссылки нужно вводить капчу!

    Если бы капчи не было, то все было бы очень просто, спамь и все. А что делать если капча есть? Да на самом деле все так же просто, только нужно еще научиться использовать сервис anti-captcha.com! Поехали...

    Для начала нужно зарегистрироваться на сайте anti-captcha.com. Стоимость одной капчи - $0.001- ИМХО - цена очень приятная ($1 за 1000 загрузок)

    Инвайты для регистрации можно найти тут

    После регистрации нужно пополнить счет и посмотреть свой ключ (дальше $key) в настройках. Для экспериментов сделал вот такую вот простую формочку:

    http://myseoincome.ru/php/anticaptcha/

    Форма-имитатор регистрации с капчей. Вводим любое имя и значение с капчи. Если капчу ввели правильно, то получаем сообщение:

    В противном случае:

    Для начала нужно провести анализ полей формы. У нас есть следующие поля:

    Все это нужно посылать методом POST. Картинку нам отдает скрипт img.php

    Еще следует помнить, что значение капчи привязано к сессии, а значит после первого подключения нам нужно будет сохранить идентификатор сессии.

    Алгоритм:

    1. Сливаем капчу (http://myseoincome.ru/php/anticaptcha/img.php) и сохраняем идентификатор сессии
    2. Отправляем капчу на разгадывание. Получаем значение
    3. Имея значение капчи и идентификатор сессии заканчиваем регистрацию

    Вот так вот, все просто. Начнем.

    Основная функция в скрипте - geturl(). С ее помощью будем сливать и постить.

    Принимает URL к которому подключиться, массив $postdata с данными для POST и параметр $header. Если последний равен единице, то выводим только заголовки страницы

    PHP:
    <?php
    function geturl($url,$postdata=0,$header=0)
    {
        
    $poststr="";
        if (
    $postdata)
            while (list(
    $name,$value)=each($postdata)){
                if (
    strlen($poststr)>0)
                    
    $poststr.="&";
                
    $poststr.=$name."=".urlencode($value);
                }

        
    // инициализация сеанса
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$url);

        if (
    $header){
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_NOBODY1);
        }else{
            
    curl_setopt($chCURLOPT_HEADER0);
        }

        if (
    $postdata){
            
    curl_setopt($chCURLOPT_POST1);
            
    curl_setopt($chCURLOPT_POSTFIELDS$poststr);
        }

        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    $res curl_exec($ch);
        
    curl_close($ch);
        return 
    $res;
    }

    ?>
    Для начала нужно получить идентификатор сессии. Для этого получаем заголовки

    PHP:
    $header geturl('http://myseoincome.ru/php/anticaptcha/',0,1);
    Ответ

    Из этого всего вытаскиваем ID сессии (edd8be2ff7a1577cc048734b43607415)

    PHP:
    preg_match('|PHPSESSID=(.*);|U'$header$out);
    $session $out[1];
    Теперь, имея идентификатор, можно слить капчу и отправляем ее на anti-captcha.com Рассказывать о том, какие параметры принимает этот сервис и зачем, я не буду, документации на их сайте хватает.

    PHP:
    $postdata = array(
        
    'PHPSESSID' => $session

    );
    $captcha geturl('http://myseoincome.ru/php/anticaptcha/img.php',$postdata);

    $postdata = array(
        
    'method'    => 'base64',
        
    'key'       => $key,
        
    'body'      => base64_encode($captcha),
        
    'ext'     => 'png'
    );
    $rev geturl("http://anti-captcha.com/in.php",$postdata);

    if (
    substr($rev,0,2)=='OK'){
        
    //получаем id капчи в системе
        
    $anti_captcha_id substr($rev,3);
    }else{
        echo 
    "Upload ERROR";
        exit;
    }
    //ждем 15 сек и проверяем капчу
    sleep(15);

    $postdata = array(
        
    'key'       => $key,
        
    'action'    => 'get',
        
    'id'     => $anti_captcha_id
    );

    $cap geturl("http://anti-captcha.com/res.php",$postdata);

    if (
    substr($cap,0,2)=='OK'){
        
    $captcha_value substr($cap,3);
    }else{
        echo 
    "ERROR";
        exit;
    }
    О этом куске кратко. Сначала используя ID сессии сливаем капчу и постим ее в антикапчу. Из ответа антикапчи получаем ID операции, по которому потом будет проверять ее статус. Поскольку эти капчи вводят люди и для распознания им нужно время, то я сделал перед проверкой значения, паузу в 15 секунд! Правильнее было бы проверять статус каждые 5 сек. в цикле, но усложнять этот пример я не буду, сами допишете.

    В итоге, если все прошло без ошибок, мы получим значение введенной капчи. Остается только запостить форму!

    PHP:
    $postdata = array(
        
    "user" => "SEO-шник",
        
    "captcha" => $captcha_value,
        
    "act" => "reg",
        
    "PHPSESSID" => $session

    );
    $recdata geturl('http://myseoincome.ru/php/anticaptcha/',$postdata);
    echo 
    $recdata;
    Я получил в ответ:

    Пример может подвиснуть если антикапча перегружена, а по ответам антикапчи можно определить когда заканчиваются средства на счете или когда просто нет свободных слотов. Все это найдете на страницы документации сервиса.

    Вот и все. При перепечатывании очень прошу указывать сайт - http://myseoincome.ru Удачи!
     
    BFox нравится это.
  2. elcaste

    elcaste

    Регистр.:
    30 ноя 2007
    Сообщения:
    322
    Симпатии:
    175
    C введением бронирования распознаваний у них появился сильный деффицит свободных слотов. Хотя, по цене это, пока что, лучшее предложение.
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Хорошая статья для новичков.
    Только можно добавить несколько слов о прокси. Если сайт с защитой-капчей серьёзный, то менять надо обязательно. Очень часто получал сообщение о просраченом ип, когда регил фри-хостинг)
     
  4. wolgast

    wolgast

    Регистр.:
    9 дек 2006
    Сообщения:
    289
    Симпатии:
    30
    Учту! Сам пока умудряюсь спамить без проксей, вот и не задел эту тему. Думаю скоро напишу вторую часть, там и прокси будут
     
  5. Atec

    Atec

    Регистр.:
    28 апр 2007
    Сообщения:
    296
    Симпатии:
    31
    И причем тут разгадывание на пхп??? Тупо реклама антикапчи и своего сайта... да еще и в про разделе... Для ПРО это ламерский пример, и не в тему ИМХО...
    P.S> Я расчитывал хотябы на однослойную нейронную сеть... было бы интересней...
     
  6. JSilver

    JSilver Постоялец

    Регистр.:
    18 апр 2006
    Сообщения:
    107
    Симпатии:
    49
    в таком же недоумении, помоему пост надо перенести в другой раздел или хотя бы переименовать в "использование сервиса антикапчи"
     
  7. baddan

    baddan

    Регистр.:
    14 мар 2008
    Сообщения:
    354
    Симпатии:
    42
  8. Ortrix

    Ortrix Постоялец

    Регистр.:
    22 сен 2007
    Сообщения:
    78
    Симпатии:
    1
    Помню таким занимался:
    Но разбирал тогда картинку в виде матрицы, сейчас поищу - может где то осталась реализация. Работало только с шрифтами Arial и Times New Roman
    Да и год тогда был 2005 или 2004...
    Если кому то нужно, а то искать нужно - оно на дивидюшке где то...
     
  9. JSilver

    JSilver Постоялец

    Регистр.:
    18 апр 2006
    Сообщения:
    107
    Симпатии:
    49
    поищи, хочу посмотреть, может что новое почерпну.
     
Статус темы:
Закрыта.