Парсинг капчи

Тема в разделе "PHP", создана пользователем Digwnews, 7 май 2010.

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

    Digwnews Читатель

    Заблокирован
    Регистр.:
    1 мар 2010
    Сообщения:
    127
    Симпатии:
    24
    Каким образом можно спарсить капчу с http://www.technobowl.ru/members?action=add?
    Вся проблема в яваскрипте, который генерит эту капчу. Не понимаю, как вообще выдирать капчу с яваскриптом.
    Вот яваскрипт:
    Код:
    <script language="JavaScript" type="text/javascript">
                var rndseed = new String(Math.random()); rndseed = rndseed.substring(2,11);
                var hex = "0123456789abcdef";
                var captchaSID = '';
                for (var i = 0 ; i < 32; i++) {
                    var pos = Math.floor(Math.random() * 16);
                    captchaSID += hex.substr(pos, 1);
                }
                document.write ('<' + 'img src="http://www.technobowl.ru//show_numimage.php?optionsSource=srv_twist_prevention&module=members&sid=' + captchaSID + '&rs='+rndseed+'" alt="Код" title="Введите этот код в следующем поле, буквы регистронезависимы" /><' + 'input type="hidden" name="captchaSID" value="' + captchaSID + '" />');
                eval("captcha_" + captchaSID + " = '';");
                var intervalId = setInterval("setCaptchaMD5Hash('" + captchaSID + "')", 300);
                eval("intervalId_" + captchaSID + " = intervalId;");
            </script>
    Спасибо.
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    562
    урл капчи генерируется так
    _ttp://www.technobowl.ru//show_numimage.php?optionsSource=srv_twist_prevention&module=members&sid=captchaSID&rs=rndseed

    Где
    rndseed - случайная строка из 9 цифр.
    captchaSID - случайная строка из 32 символов. Можно сгенерировать как md5(mt_rand())
    Но, вмнсте с формой передаётся ещё и значение captchaSID причём захешированное. Те надо передать значение md5(captchaSID)
     
    Digwnews нравится это.
  3. Digwnews

    Digwnews Читатель

    Заблокирован
    Регистр.:
    1 мар 2010
    Сообщения:
    127
    Симпатии:
    24
    Хм..
    Что я делаю не так?
    PHP:
    <?php
      
    IF(!$_POST['cap'])
      {
      
    $captchaSID=mt_rand(150000000999999999);

    $rnd=md5(mt_rand());

    echo 
    '<img src="http://www.technobowl.ru//show_numimage.php?optionsSource=srv_twist_prevention&module=members&sid='.$captchaSID.'&rs='.$rnd.'">';
      echo 
    '<form method="post" action="new.php"><input type="text" name="cap"><input type="hidden" name="hash" value="'.md5($capthaSID).'"><input type="submit" value="enter">';
      }
      else
      {
      echo 
    $_POST['hash'];
      
    $md=$_POST['hash'];
    $post='modlink=members&action=add&create=1&username=newlog11&password=pass&password2=pass&email=jdhy@gmail.com&firstname=Alex&lastname=ddd&phone=&phone_work=&phone_cell=&icq=&address1=&city=&state=&country=ru&company=&companyweb=&photo=&forum_sign=SIGNATURE&captchaSID='.$md.'&captcha='.$_POST['cap'].'&protected_field=1977
    '
    ;
    $url 'http://www.technobowl.ru/pages.php';
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_REFERER'http://www.technobowl.ru/members?action=add');
        
        
    curl_setopt($chCURLOPT_POSTTRUE);
        
    curl_setopt($chCURLOPT_POSTFIELDS,$post);
        
    $data curl_exec($ch);
        
    $error curl_error($ch);
        
    curl_close($ch);
        echo 
    $data;
        }
    ?> 
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    562
    При обращении к капче в куки записывается информация, скорее всего сервер проверяет её.
     
  5. Digwnews

    Digwnews Читатель

    Заблокирован
    Регистр.:
    1 мар 2010
    Сообщения:
    127
    Симпатии:
    24
    И каким образом получить куки капчи?
    Спарсить её с помощью курла с включёнными куками?

    Добавлено через 40 минут
    Так не получается..
    PHP:
     <?php
      
    IF(!$_POST['cap'])
      {
      
    $captchaSID=mt_rand(150000000999999999);
    //echo $captchaSID;
    $rnd=md5(mt_rand());
    //echo $rnd;
    //echo md5($captchaSID);
    //http://www.technobowl.ru/members?action=add
    if( $curl curl_init() ){

            
    // Задаем ссылку
            
    curl_setopt($curl,CURLOPT_URL,'http://www.technobowl.ru//show_numimage.php?optionsSource=srv_twist_prevention&module=members&sid='.$captchaSID.'&rs='.$rnd.'');
            
    // Скачанные данные не выводить поток
            
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curlCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
    curl_setopt($curlCURLOPT_COOKIEJAR'cook.txt');
        
    curl_setopt($curlCURLOPT_COOKIEFILE'cook.txt');
            
    // Скачиваем
            
    $out1 curl_exec($curl);

            
    // Закрываем соединение
            
    curl_close($curl);
        }    
    $handle fopen("captcha.jpg""w+");
    $res=fwrite($handle$out1);
    echo 
    '<img src="captcha.jpg">';
      echo 
    '<form method="post" action="new.php"><input type="text" name="cap"><input type="hidden" name="hash" value="'.md5($capthaSID).'"><input type="submit" value="enter">';
      }
      else
      {
      echo 
    $_POST['cap'];
      echo 
    $_POST['hash'];
      
    $md=$_POST['hash'];
    $post='modlink=members&action=add&create=1&username=newlog11&password=pass&password2=pass&email=jdhy@gmail.com&firstname=Alex&lastname=ddd&phone=&phone_work=&phone_cell=&icq=&address1=&city=&state=&country=ru&company=&companyweb=&photo=&forum_sign=SIGNATURE&captchaSID='.$md.'&captcha='.$_POST['cap'].'&protected_field=1977
    '
    ;
    $url 'http://www.technobowl.ru/pages.php';
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_REFERER'http://www.technobowl.ru/members?action=add');
        
    curl_setopt($chCURLOPT_COOKIEJAR'cook.txt');
        
    curl_setopt($chCURLOPT_COOKIEFILE'cook.txt');
        
    curl_setopt($chCURLOPT_POSTTRUE);
        
    curl_setopt($chCURLOPT_POSTFIELDS,$post);
        
    $data curl_exec($ch);
        
    $error curl_error($ch);
        
    curl_close($ch);
        echo 
    $data;
        }
    ?> 
     
  6. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Значение сто пудов в сессию пишется и его ты никак не выдернишь... Клиенту только идентификатор передается...
     
  7. Digwnews

    Digwnews Читатель

    Заблокирован
    Регистр.:
    1 мар 2010
    Сообщения:
    127
    Симпатии:
    24
    И как же тогда обойти это?

    ---------- Post added at 18:07 ---------- Previous post was at 17:02 ----------

    В общем если кто-то может написать такую регилку - пишите в ЛС, оплачу.
     
Статус темы:
Закрыта.