работа с кодом сервиса Антикаптчи

Все вопросы касающиеся использования
программы можно задать здесь
Аватара пользователя
igvard
Site Admin
Сообщения: 241
Зарегистрирован: 31 июл 2008, 22:53

работа с кодом сервиса Антикаптчи

Сообщение igvard » 07 фев 2009, 18:33

вот это сам код для использования в вашем скрипте сервиса распознания каптч - антикаптча

Код: Выделить всё

<?php
/*
$filename - полный путь к файлу
$apikey   - ключ для работы
$rtimeout - задержка между опросами статуса капчи
$mtimeout - время ожидания ввода капчи

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

дополнительно (дефолтные параметры править не нужно без необходимости):
$is_phrase - 0 либо 1 - флаг "в капче 2 и более слов"
$is_regsense - 0 либо 1 - флаг "регистр букв в капче имеет значение"
$is_numeric -  0 либо 1 - флаг "капча состоит только из цифр"
$min_len    -  0 (без ограничений), любая другая цифра указывает минимальную длину текста капчи
$max_len    -  0 (без ограничений), любая другая цифра указывает максимальную длину текста капчи

пример:
$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки",true);

$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки",false);  //отключено комментирование

$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки",false,1,0,0,5);  //отключено комментирование, капча состоит из двух слов, общая минимальная длина равна 5 символам

*/



function recognize($filename, $apikey, $is_verbose = true, $rtimeout = 5, $mtimeout = 120, $is_phrase = 0, $is_regsense = 0, $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://www.anti-captcha.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://anti-captcha.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;
    }
}
?> 
этот код заварачивается в отдельный файл например anticaptcha.php
и затем добавлется в ваш скрипт кодом

Код: Выделить всё

include ("anticaptcha.php");
при этом этот файл должен лежать там же где и ваш скрипт.

Использование в скрипте простое -

Код: Выделить всё


// сохраняем файл
$image->save_to_file_by_url("URL картинки","полный путь к файл","false");// false это значит что не обязательно должно совпадать url параметр (то есть можно и по части url искать картинку) 

// получеие каптчи 
$Captcha=recognize("полный путь к файл","ваш ключ антикаптчи",true);
вот и всё))

Andrew
Сообщения: 9
Зарегистрирован: 10 апр 2009, 13:40

Сообщение Andrew » 10 апр 2009, 15:11

а как мне подключить www.captchabot.com ?
скачал у них php.zip
там:
\php\curl\curl.php
\php\sock\http.php
\php\sock\sockets.php
что мне с этим делать?
Я никогда с каптчами не работал.

Andrew
Сообщения: 9
Зарегистрирован: 10 апр 2009, 13:40

Сообщение Andrew » 10 апр 2009, 17:55

и как бороться с такой каптчей?
http://recaptcha.net/

cathderay
Сообщения: 32
Зарегистрирован: 09 апр 2009, 23:05

Сообщение cathderay » 10 апр 2009, 20:01

Andrew писал(а):и как бороться с такой каптчей?
http://recaptcha.net/
присоединяюсь к вопросу.
пробывал так:
$captcha = $app->dlg_captcha_from_url_exactly("api.recaptcha.net","false");

облом, кто знает как использовать recaptcha.net?

Andrew
Сообщения: 9
Зарегистрирован: 10 апр 2009, 13:40

Сообщение Andrew » 10 апр 2009, 20:57

у меня ссылка на каптчу
https://api-secure.recaptcha.net/image?c=02bqjl7mRvxOy7ntEdjreC1qGZ8w2a..........................

но там есть еще ссылки на рисунки с их сервера. Типа обновить и прочие...

Поэтому я задаю
$app->dlg_captcha_from_url_exactly("recaptcha.net/image?","false");
данный кусок содержится только в ссылке на каптчу, но это все равное не работает. Каптча не грузится в окно ввода :(

Andrew
Сообщения: 9
Зарегистрирован: 10 апр 2009, 13:40

Сообщение Andrew » 10 апр 2009, 21:05

задаю урл каптчи в строке и она открывается.
есть подозрение что каптча не сохраняется в кэш потому что исходное изображение без расширения .jpg или может урл слишком длинный?

LagerAlexey
Site Admin
Сообщения: 18
Зарегистрирован: 04 сен 2008, 16:10

Сообщение LagerAlexey » 10 апр 2009, 22:52

Код обходит не все рекапчи, так как каждый сервер подгоняет его под себя, но тем не менее:

<?php

// ищем идентификатор каптчи на странице
$pref ="src=\"http://api.recaptcha.net/image?c=";
$pref1 ="\" width=";
$text = $webpage->get_body();

$ind = strpos($text,$pref);
$ind1 = strpos($text,$pref1,$ind);

$cod = substr($text,$ind+strlen($pref),$ind1-$ind-strlen($pref));
// получаем url к текущей каптче
$url_captcha = "http://api.recaptcha.net/image?c=".$cod;
// вводим каптча
$captcha = $app->dlg_captcha_from_url_exactly($url_captcha,"false");
$input->set_value_by_name("recaptcha_response_field",$captcha);

?>

Andrew
Сообщения: 9
Зарегистрирован: 10 апр 2009, 13:40

Сообщение Andrew » 11 апр 2009, 03:18

насколько я понял это тоже самое только с точным урлом к каптче.

но проблема в том что у меня банально каптча не сохраняется в C:\Program Files\Xedant\Human Emulator\Temp\
Другая сохраняется в папку и от туда выводится при частичном совпадении урла, а эта не хочет.
Видимо здесь проблема в другом.

Код: Выделить всё


<p>We need to make sure you are a human. Please solve the challenge below, and click the I'm a Human button to get
a confirmation code. To make this process easier in the future, we recommend you enable Javascript.</p>

<form action="" method="POST">

<input type="hidden" name="recaptcha_challenge_field" id="recaptcha_challenge_field" value="02B5ixbjCJ9KQZ89DMbLCAPUB1p4CSiR2uqOvemeRkaeDoignq1mciRxjQqY5LnGUffaDHS964LWH9GDmkbKHV0S9a_M-_u3qCgmIlBigLSsym_rJuvaiYRglC6p2zUmK5auk3vIoEGQG7Awu9I7XgiOdpawbRm8nAd_4jYzhwer_wDq_liE5y7lr3or4ZIR8-kqmGQoNvXcIWZObEbCJR2Yoc5POd5i4pjBNY5huC6GCGPwf-6fqCa53uqfOx1bqNrP4ZUw-vmrgFRIrn3a2WSuHN1-wB" />

<table id="recaptcha_table" class="recaptchatable recaptcha_theme_red" >
        <tr>
          <td colspan="6" class='recaptcha_r1_c1'></td>
        </tr>
        <tr>
          <td class='recaptcha_r2_c1'></td>
          <td colspan="4" class='recaptcha_image_cell'><center>

<img id="recaptcha_image" width="300" height="57" alt="" src="[b]/image?c=02B5ixbjCJ9KQZ89DMbLCAPUB1p4CSiR2uqOvemeRkaeDoignq1mciRxjQqY5LnGUffaDHS964LWH9GDmkbKHV0S9a_M-_u3qCgmIlBigLSsym_rJuvaiYRglC6p2zUmK5auk3vIoEGQG7Awu9I7XgiOdpawbRm8nAd_4jYzhwer_wDq_liE5y7lr3or4ZIR8-kqmGQoNvXcIWZObEbCJR2Yoc5POd5i4pjBNY5huC6GCGPwf-6fqCa53uqfOx1bqNrP4ZUw-vmrgFRIrn3a2WSuHN1-wB[/b]"></center></td>


          <td class='recaptcha_r2_c2'></td>
        </tr>
        <tr>
          <td rowspan="6" class='recaptcha_r3_c1'></td>
          <td colspan="4" class='recaptcha_r3_c2'></td>
          <td rowspan="6" class='recaptcha_r3_c3'></td>
        </tr>
        <tr>
          <td rowspan="3" class='recaptcha_r4_c1' height="49">
            <div class="recaptcha_input_area">
              <label for="recaptcha_response_field" id="recaptcha_instructions" class="recaptcha_input_area_text">
		Type the two words:		      
	      </label><br/>
              <input name="recaptcha_response_field" id="recaptcha_response_field" type="text" autocomplete="off"/>
            </div>
          </td>
	  
          <td rowspan="4" class='recaptcha_r4_c2'></td>
	  
          <td><a id='recaptcha_reload_btn' href="/noscript?k=6LegWAEAAAAAANJcmtbLTuHlG7AbDzLPxvimCw_Z&is_audio=False" title="Get a new challenge" tabindex='-1'><img id='recaptcha_reload' src="/img/red//refresh.gif" alt="Get a new challenge" width="25" height="17" /></a></td>
	  
          <td rowspan="4" class='recaptcha_r4_c4'></td>
	  
        </tr>
        <tr>
                <td><a id='recaptcha_switch_audio_btn' tabindex='-1' title="Get an audio challenge" href="/noscript?k=6LegWAEAAAAAANJcmtbLTuHlG7AbDzLPxvimCw_Z&is_audio=True"><img id='recaptcha_switch_audio' width="25" height="16" alt="Get an audio challenge" src="/img/red//audio.gif"/></a></td>

        </tr>
        <tr>
          <td><a id='recaptcha_whatsthis_btn' title="Help" href="http://recaptcha.net/popuphelp/" target="_blank" tabindex='-1'><img id='recaptcha_whatsthis' alt="Help" width="25" height="16" src="/img/red//help.gif" /></a></td>
	  
        </tr>
        <tr>
          <td class='recaptcha_r7_c1'></td>
          <td class='recaptcha_r8_c1'></td>
        </tr>
        <tr>

        </tr>
</table>
<input type="submit" name="submit" value="I'm a Human" />
</form>



cathderay
Сообщения: 32
Зарегистрирован: 09 апр 2009, 23:05

Сообщение cathderay » 12 апр 2009, 19:24

Andrew писал(а):насколько я понял это тоже самое только с точным урлом к каптче.

но проблема в том что у меня банально каптча не сохраняется в C:\Program Files\Xedant\Human Emulator\Temp\
Другая сохраняется в папку и от туда выводится при частичном совпадении урла, а эта не хочет.
Видимо здесь проблема в другом.

Код: Выделить всё


<p>We need to make sure you are a human. Please solve the challenge below, and click the I'm a Human button to get
a confirmation code. To make this process easier in the future, we recommend you enable Javascript.</p>

пропиши
$browser->enable_java_script("true");

xaxaxa
Сообщения: 5
Зарегистрирован: 13 апр 2009, 10:46

Сообщение xaxaxa » 13 апр 2009, 12:17

и что это дает?
инклуднул данный код.
Оно загружает форму ввода капчи, но самой капчи нету.
Но даже если бы отдавало нормаольно - как её отсылать на антикапчу?

Или может кто поделиться уже готовым решением нормальным для этой рекапчи гребаной?

Andrew
Сообщения: 9
Зарегистрирован: 10 апр 2009, 13:40

Сообщение Andrew » 13 апр 2009, 14:42

пропиши
$browser->enable_java_script("true");
аааааа. мега сэнкс. Работает!!! :lol: :lol: :lol:

xaxaxa
Сообщения: 5
Зарегистрирован: 13 апр 2009, 10:46

Сообщение xaxaxa » 13 апр 2009, 15:07

Андрюх, поделись, как ты отсылаешь капчи на антикапчу?!
Никак не могу разобратся сам

Andrew
Сообщения: 9
Зарегистрирован: 10 апр 2009, 13:40

Сообщение Andrew » 13 апр 2009, 17:01

а в чем выражается проблема?
для начала проверь сохраняется ли у тебя каптча в файл.

// сохранение каптчи
$image->save_to_file_by_url("recaptcha.net/image?","C:\captcha.jpeg","false");

Я только инвайт на антикаптчу получил. Так что еще пока не работает. Еще не зарегился даже.

Но при инклюде скрипта выдает ошибку
cannot redeclare recognize previously declared in ................ php:29 .............. online 102
строка 102 это последняя скобка
Как исправить?

xaxaxa
Сообщения: 5
Зарегистрирован: 13 апр 2009, 10:46

Сообщение xaxaxa » 14 апр 2009, 20:32

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

Kostass
Сообщения: 30
Зарегистрирован: 07 фев 2009, 06:51
Контактная информация:

Сообщение Kostass » 16 май 2009, 16:42

Андрей, поделитесь плиз инвайтом на captchabot.com
Я бы изменил алгоритм, но Яша не дает исходники... (с) Krizess

Ответить