Прошу помочь с авторегистратором (указать на ошибки)

Discussion in 'PHP' started by Roman0612, 4 Oct 2013.

  1. Roman0612

    Roman0612 New Member

    Joined:
    19 Dec 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, уважаемые пользователи.

    Начал сам писать авторегистратор для 9gag.com
    Нашел в инете исходники, пытаюсь переделать. Вроде вникся, но что-то не получается.

    Пишу на PHP, т.е. скрипт (сам в программировании практически ноль)


    Собственно, вот код:
    PHP:
    <?php
    header
    ('Content-Type: text/html; charset=UTF-8');
    function 
    register1()
    {
        
    // Особая, curl-ная магия
        
    $ch curl_init(); // Инициализируем сессию
        
    curl_setopt($chCURLOPT_URL,"https://9gag.com/member/email-signup"); // задаем адрес формы
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1); // Результат нам нужно вернуть в переменную, а не на экран
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); // Переходить по редиректам
        
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); // Указываем файл для хранения кукисов
        
        // Выполняем запрос
        
    $result curl_exec($ch);
        
        
    // При помощи простейшего регулярного выражения добываем сессионный ключ
        
    preg_match('#<input type=hidden name="recaptcha_challenge_field" value="([a-f0-9]+)">#i'$result$key);
        
        
    curl_setopt($chCURLOPT_URL,"http://www.google.com/recaptcha/api/image?c=$key[1]"); // задаем адрес картинки
        
        
    $result curl_exec($ch); // Скачиваем картинку
        
    curl_close ($ch); // Закрываем сессию
        
        
    file_put_contents('captcha.jpg'$result); // Сохраняем
        
        
    return $key[1]; // Возвращаем добытый ключ
    }

    // Функция, производящая регистрацию
    function register2($login$email$password$captcha$key)
    {
    // Все POST-параметры, которые надо отправить
        
    $post = array(
            
    'recaptcha_challenge_field'    => $key// Передаем сессионный ключ
            
    'signup-email-name'        => $login// Логин
            
    'signup-email-email'        => $email// Емейл
            
    'signup-email-password'    => $password// Пароль
            
    'recaptcha_response_field'    => $captcha// А это наш код с картинки
            
    'do_reg'    => 'Sign Up'// "Нажимаем" кнопку отправить ;-)
        
    );

        
    // Особая, curl-ная магия
        
    $ch curl_init(); // Инициализируем сессию
        
    curl_setopt($chCURLOPT_URL,"https://9gag.com/member/email-signup"); // задаем адрес обработчика формы
        
    curl_setopt($chCURLOPT_POST1); // Указываем, что нам нужно отправить POST-запрос
        
    curl_setopt($chCURLOPT_POSTFIELDS$post); // Передаем POST-параметры
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1); // Результат нам нужно вернуть в переменную, а не на экран
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); // Переходить по редиректам
        
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); // Указываем файл для хранения кукисов. При чем он должен быть тот же, что и в прошлый раз, чтобы кукисы подхватились.
        
        // Запускаем запрос!
        
    $result curl_exec($ch);
        
    curl_close ($ch); // Закрываем сессию
        
        // Проверяем на успешность регистрации
        
    if(strstr($result'Me Gusta! Welcome to 9GAG, go have fun now!'))
        {
            return 
    true;
        }
        else
        {
            return 
    false;
        }
    }

    // Параметры регистрации. Их можно задавать руками, или считывать из файла - на ваше усмотрение.
    $login 'antifrager223';
    $email '[email protected]';
    $password 'qwerty';

    // Выводим, что мы будем регать
    echo "Логин: $login, пароль: $password, email: $email<br/>";

    // Если мы уже ввели капчу, то заканчиваем регистрацию
    if(!empty($_GET['captcha']))
    {
        
    // Регаем
        
    if(register2($login$email$password$_GET['captcha'], $_GET['key']))
        {
            echo 
    'Успешно зарегистрирован';
        }    
        else
        {
            echo 
    '<b>Ошибка регистрации</b>';
        }
        echo 
    '<br><a href="'.basename(__FILE__).'">Еще раз</a>';
    }
    else
    {
        
    // Если капчу еще не ввели - отображаем ее и просим ввести :)
        
    $key register1();
        
    $form '<h2>Введите код с картинки</h2>
        <img src="captcha.jpg">
        <form>
        <input type="hidden" name="key" value="'
    .$key.'">
        <input type="text" name="captcha">
        <input type="submit" name="Go!"></form>'
    ;
        echo 
    $form;
    }

    ?>
    Форма регистрации: https://9gag.com/member/email-signup

    анализировал с помощью плагина для Firefox Web Developer.

    Проблема: Не понял что с капчей делать. Как получить сессионный ключ ? (в коде он с исходника, я просто не понял как и на что его менять)

    вот конкретно он:
    PHP:
     // При помощи простейшего регулярного выражения добываем сессионный ключ
        
    preg_match('#<input type=hidden name="recaptcha_challenge_field" value="([a-f0-9]+)">#i'$result$key);  
    И при выполнении скрипта он просто не выводит капчу (картинка пустая).

    И еще, сразу задам вопрос (я еще не искал это): как сделать, чтобы он брал email: pass с загруженного файла txt (по очереди) т.е. браз с базы, регистрировал, я ввожу капчу и далее со следующими.

    Кому не сложно, помогите, пожалуйста!
     
    #1 Roman0612, 4 Oct 2013
    Last edited: 4 Oct 2013
  2. Artur Fis

    Artur Fis New Member

    Joined:
    22 Sep 2013
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Конечно пустая, потому что нету такого участка формы, вероятна со времени написания скрипта прошло достаточно времени, и владельцы изменили форму регистрации.

    Надо выдирать отсюда:

    Code:
    <div id="recaptcha_image" style="width: 300px; height: 57px;">
    <img style="display:block;" alt="reCAPTCHA challenge image" height="57" width="300" src="http://www.google.com/recaptcha/api/image?c=03AHJ_Vutgy6Tz1w01RXM7ROXu8Snhfb76a7Hy-XnzMkDNrq1LoAclmBdSO-mZVL2048ybBH4iqes3XrJnL92HWswCKS-GvQ-B1gk7oGL4z-MT0lDFUbj5y2_exS115xwZReSyZ13SFvp0XxNp5LUGUm7EFHbZzFy1sN_sa-0cMuiLJQJYlUGkd_4">
    </div>
     
  3. Roman0612

    Roman0612 New Member

    Joined:
    19 Dec 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0

    и вот снова.... немного другой код.
    но он намного ближе к тому, что мне нужно. Опять же уже все(!) изменил под себя.

    На сайт положил, запускаю и выдает ошибку Fatal error: Class 'Module' not found in /home/content/54/11502654/html/Memori.php on line 3

    При чем на оригинальном такая же ошибка.

    Что это? 3-я строка - это скобка =\ (закрывается вконце)