Ввод капчи

Discussion in 'PHP' started by programming, 27 Aug 2009.

  1. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Появилась новая проблема.. Совсем недавно я спрашивал как можно вытащить капчу со страницы.. Вот эта тема - http://forum.antichat.ru/thread137573.html
    Задача теперь состоит вот в чём:
    1. пользователь заходит на сайт, в котором отображена только капча и поле ввода(то есть не на сайт с формой где реально располагается капча изначально)
    2. пользователь вводит капчу и нажимает на кнопку после чего с помощью curl происходит заполнение формы.
    НО! На следующей странице то уже будет другой url капчи..
    В общем то именно это я и не знаю как обойти..
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    programming Не получится, значение капчи устанавливается в кукисы. Установить куки для чужого домена - не получится, не позволит политика безопасности браузера

    З.Ы, людей украшает скромность - зачем срать на форуме создавая по 10 тем?
     
    _________________________
  3. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Немного не понял.. По-моему Вы написали бред.. Или же напишите, что Вы подразумеваете под значением капчи..

    А на счёт тем - не 10, а всего 2 и причём с совсем разными вопросами..
     
  4. svesve

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

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    Как я понимаю надо чтобы грубо говоря перед регой или заполнением формы пользователь заполнял капчу?
    а потом уже получит доступ на страницу с формой на которой будет капча именно от этой формы?
     
  5. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    1. Заходим на сайт и получаем необходимые значения
    • Куки записываем: curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
    2. Выводим картинку капчи и вводим в поле её значение
    3. Отправляем cURL'ом это значение + значения из п.1
    • Используем: curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
    4. Отправляем post запрос для заполнения формы на сайте, используем COOKIEFILE из п.3
     
    3 people like this.
  6. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Немного не так..
    Значит есть два сайта - первый с формой регистрации(вместе с капчей), а второй, на котором отображена только капча и поле ввода.
    Нужно, чтобы пользователь заходил на второй сайт вводил капчу, а уже php с помощью curl отправлял запрос на первый сайт уже со своими данными, но значением капчи, которое ввёл пользователь.
     
  7. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Так в том то и дело, что не каких куков нет. Куки появляются только после того, как мы уже нажали на первом сайте на кнопку регистрация..
    Быть может я чего-то не понимаю..
     
  8. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Да это я повидимому что-то не понимаю )
    Если сайта два, то и капчи две и какое они имеют отношение друг к другу ?

    Покажите ссылки
     
  9. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Ну или же если более конкретно поставить задачу теперь -нужно, чтобы пользователь вводил капчу на странице и на этой же странице после его ввода должен отправляться пост запрос. Вот какэто реализовать?

    Сайт один на котором капча, а второй где распологается мой скрипт. А скрипт вытягивает капчу с первого сайта, поэтому капчи должны быть одинаковыми..
     
    #9 programming, 27 Aug 2009
    Last edited: 27 Aug 2009
  10. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    ..
     
  11. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Не понимаю как можно второй третий и четвёртый пункт сделать на одной странице..
     
  12. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    PHP:
        if($_POST['captcha'])
        {
        
    # Отправляем все данные (включая код капчи) на сервер) (см.п.3)
        
    }
        else
        {
         
    # cURL'ом получаем необходимые значения (см.п.1)
         # Выводим форму для ввода капчи (в hidden передаём необходимые значения) (см.п.2)
        
    echo '<img src="captcha.jpg"><br>
           <form name="captcha_form" action="index.php" method="POST">
              <input type="text" name="captcha" value="" /><br>         
              <input type="hidden" name="HIDDEN-1" value="'
    .$HIDDEN-1.'" />
              <input type="hidden" name="HIDDEN-2" value="'
    .$HIDDEN-2.'" />
              <input type="submit" value="ok">
           </form>'

         }
     
    5 people like this.
  13. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Нет.. Всё равно не получается.. В п.3 то уже другая сессия получается..
    В общем не знаю уже, что делать.. Буду тогда конкретно спрашивать.
    Итак, задача:
    Есть сервис http://moemesto.ru. Нужно сделать скрипт, который вытаскивает капчу со страницы регистрации - http://moemesto.ru/register/?from=button. Создаёт форму где есть поле ввода и сама картинка капчи. Пользователь вводит код с картинки и нажимает на кнопку. В самом скрипте вшиты данные о регистрации - то есть логин, пароль и пр. С ними и происходит регистрация. В конце, после нажатия пользователем кнопки у него открывается страница, что всё успешно прошло.
    Уже бьюсь с этим 3-й день - никакого эффекта.. Если хотите - могу дать мой код. Может ошибки найдёте..
     
  14. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    PHP:
    <?php
    @set_time_limit(0);
    //-----------------//
    $accounts 'accounts.txt'// Файл для сохранения аккаунтов
    $divider  ':';           // Раздеитель 
    $login '';              // Login
    $password '';          // Password
    $email '';            //  E-mail
    //-----------------//

           
    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;
        }
        
            if(
    $_POST['captcha'])
        {
          
    $result post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$login.'&email='.$email.'&password='.$password.'&captcha='.trim($_POST['captcha']).'&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','Referer: http://moemesto.ru/register/?from=button');
          
    $result iconv("UTF-8","Windows-1251",$result);
           if(
    preg_match('#2>П(.*?)з#i',$result,$end))
            {
              
    $fh fopen($accounts"a+");
              
    $success fwrite($fh$login.$divider.password."\r\n");
              
    fclose($fh);
              
    Header('Location: index.php');
            }
            else
            {
              echo 
    '<script>alert(\'Не правильный код!\')</script>';
              echo 
    '<meta http-equiv="Refresh" content="0; url=index.php">'
            }
        }
        else
        {
        
    $result post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
        
    preg_match('#id" value="(.*?)"#i',$result,$captchaid);
        
            echo 
    '<img src="http://moemesto.ru/captcha/'.$captchaid[1].'"><br>
              <form name="captcha_form" action="index.php" method="POST">
              <input type="text" name="captcha" value="" /><br>
              <input type="hidden" name="captchaid" value="'
    .$captchaid[1].'" />
                 <input type="submit" value="ok">
               </form>'

        }
    /* geforse.name */
    ?>
     
    2 people like this.
  15. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Огромное спасибо. Всё заработало! А мой код не работал как обычно по моей же не внимательности..
     
  16. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Опять появились трудности с этим скриптом..
    Решил сделать ввод данных из формы:
    Code:
    <form action="/index.php" method="get">
    Логин:<input type="text" name="login"><br>
    Пароль:<input type = "text" name="password"><br>
    E-mail:<input type ="text" name = "email">  <br>
    <input type ="submit" value="Регистрация">
    </form>
    
    Но скрипт не видит эти переменные и считает, что их нет. Из начала скрипта я конечно убрал логин, пароль и e-mail.
    В чём может быть причина?
     
  17. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    PHP:
    <form action="/index.php" method="POST">
    В скрипте (index.php) вызывай так:
    PHP:
    $login $_POST['login'];
     
    #17 geforse, 28 Aug 2009
    Last edited: 28 Aug 2009
  18. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Да пробовал я уже так.. Вообще в скрипте почему-то нет таких переменных когда даже я методом гет передавал и в адр. строке они были прописаны.. Вообще парадокс..
     
  19. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    PHP:
    <?php
    @set_time_limit(0);
    //-----------------//
    $accounts 'accounts.txt'// Файл для сохранения аккаунтов
    $divider  ':';           // Раздеитель 
    //-----------------//

           
    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;
        }
        
            if(
    $_POST['captcha'])
        {
          
    $result post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$_POST['login'].'&email='.$_POST['email'].'&password='.$_POST['password'].'&captcha='.trim($_POST['captcha']).'&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);
           if(
    preg_match('#2>П(.*?)з#i',$result,$end))
            {
              
    $fh fopen($accounts"a+");
              
    $success fwrite($fhtrim($_POST['login']).$divider.trim($_POST['password'])."\r\n");
              
    fclose($fh);
              
    Header('Location: index.php');
            }
            else
            {
              echo 
    '<script>alert(\'Не правильный код!\')</script>';
              echo 
    '<meta http-equiv="Refresh" content="0; url=index.php">'
            }
        }
        else
        {
        
    $result post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
        
    preg_match('#id" value="(.*?)"#i',$result,$captchaid);
        
            echo 
    '
              <form name="captcha_form" action="index.php" method="POST">
              Код:&nbsp;<input type="text" name="captcha" value="" />&nbsp;<img src="http://moemesto.ru/captcha/'
    .$captchaid[1].'"><br><p>
              <input type="hidden" name="captchaid" value="'
    .$captchaid[1].'" />
              Логин:&nbsp;<input type="text" name="login"><br><p>
              Пароль:&nbsp;<input type = "text" name="password"><br><p>
              E-mail:&nbsp;<input type ="text" name = "email"><br><p>
              <input type ="submit" value="Регистрация">
               </form>'

        }
    /* geforse.name */
    ?> 
     
  20. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    :D Не ну так то понятно.. Хотелось бы всё таки с другой страницы передавать значения..