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

Статус
В этой теме нельзя размещать новые ответы.

Yyury2

Создатель
Регистрация
9 Июл 2008
Сообщения
32
Реакции
13
На античате увидел полуавтоматический регер акков на закладочнике
moemesto.ru. Ccылка:
как оказалось это просто кусок кода где вводится капча. Я решил его доработать до полноценного регера с антикапчей
У меня получилось вот что:
PHP:
<?php
@set_time_limit(0);
//-----------------//
$accounts = 'accounts.txt'; // Файл для сохранения аккаунтов
$divider  = ':';           // Раздеитель 
$apikey = ''; // Антикапча ключ
//-----------------//
       function post($url,$post,$refer)
    {
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_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($ch, CURLOPT_POST, 1);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
       curl_setopt($ch, CURLOPT_REFERER, $refer);
       curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook1");
       curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook1");
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $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($ch, CURLOPT_URL,             'http://antigate.com/in.php');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,     1);
    curl_setopt($ch, CURLOPT_TIMEOUT,             60);
    curl_setopt($ch, CURLOPT_POST,                 1);
    curl_setopt($ch, CURLOPT_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(5, 11,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 Подскажите чайнику, плиз
 
какой результат вы получаете после отправки данных?
 
судя по куску кода у тебя не закрыта кавычка
$mg = array ("a", "s", "d", "w", "f","w", "e", "f", "j, "g", "e", "b", "a", "m", "d", "e", "f", "h", "g");
это даже в местном обрамлении видно.
Исправь и проверь

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


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

ну и смотреть что отвечает антикапча тоже полезно
это я про
включить/выключить verbose mode (комментирование происходящего:(
$is_verbose - false(выключить), true(включить)
при работе с api


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



PS советую все таки пользоваться редакторами с нормальной подстветкой кода
 
Заменил строчку
$result = iconv("UTF-8","Windows-1251",$result);
echo $result;

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

Приведу пример с рекапчей и 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 //

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

Так вот по аналогии как с этой капчей поступить?
 
если ты регишь аккаунты в цикле
Код:
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 Код ужасный
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху