Неправильно определяется тип каптчи

Vitalii72

Пользователь
Регистрация
01.07.2015
Сообщения
30
Благодарностей
2
Баллы
8
Очень часто капчу Mail.Ru определяет как AOL.
Нужна возможность отправлять тип каптчи в дополнительных параметрах API сервисов, либо определять тип на основе домена. Но лучше чтобы возможность через дополнительный параметр была.

CapMonsterModule=MailRu - это только через модуль зенно можно?
 

Sobesednic

Client
Регистрация
24.12.2012
Сообщения
391
Благодарностей
77
Баллы
28
У меня нет такой проблемы, все четко определяет
 
  • Спасибо
Реакции: Vitalii72

Vitalii72

Пользователь
Регистрация
01.07.2015
Сообщения
30
Благодарностей
2
Баллы
8
Это вы через модуль в зенно капмонстр определяете? Возможно через зенно и модуль капмонстр проблем нет. А попробуйте другим софтом капчу как на сервис отправить.
 

Sobesednic

Client
Регистрация
24.12.2012
Сообщения
391
Благодарностей
77
Баллы
28
Да с зенки отсылаю
 

Vitalii72

Пользователь
Регистрация
01.07.2015
Сообщения
30
Благодарностей
2
Баллы
8
Тип Google капчи тоже некорректно определяет


 

nuaru

Main Administrator
Команда форума
Регистрация
14.01.2009
Сообщения
3 641
Благодарностей
2 472
Баллы
113
Очень часто капчу Mail.Ru определяет как AOL.
Скиньте несколько таких каптч, есть подозрение, что они из используемой вами программы приходят с искажением.

Тип Google капчи тоже некорректно определяет
Увы пока так. Если приходят только слова как на скриншоте, то нужно поставить распознавать все каптчи как GoogleWords или отключить модуль GoogleDigits.
Сами понимаете, слова от цифр ничем не отличаются, кроме того, что на одной каптче буквы, на другой цифры, но это известно становится, только если каптчу распознать. В принципе это решаемо, чуть позже возьмемся за это.
 
  • Спасибо
Реакции: Vitalii72

Vitalii72

Пользователь
Регистрация
01.07.2015
Сообщения
30
Благодарностей
2
Баллы
8
Скиньте несколько таких каптч, есть подозрение, что они из используемой вами программы приходят с искажением.
Каптча оригинальная. Не из мобильной версии. С капчей ничего не делается, сразу на сервис отправляется. Прикрепил 100 штук. Они все определяются либо как AOL либо совсем никак.
 

Вложения

  • 393 КБ Просмотры: 256
  • 31,4 КБ Просмотры: 727

nuaru

Main Administrator
Команда форума
Регистрация
14.01.2009
Сообщения
3 641
Благодарностей
2 472
Баллы
113
Нет, у этой тоже размеры не совпадают, она обрезана в отличие от оригинальной, от сюда ее и не признает как mail ru каптчу
 

Vitalii72

Пользователь
Регистрация
01.07.2015
Сообщения
30
Благодарностей
2
Баллы
8
Может настройки по размерам каждого типа каптч вынесите в отдельные конфигурационные файлы?
Можете добавить этот размер каптч?
Браузером захожу пытаюсь зарегистрироваться - сохраняю каптчу, которая вылетает в Pop-Up окне и размер тотже. Ничто капчу не обрезает 100%. Возможно вам выдаётся один размер каптч, а мне другой.
 

nuaru

Main Administrator
Команда форума
Регистрация
14.01.2009
Сообщения
3 641
Благодарностей
2 472
Баллы
113
Может настройки по размерам каждого типа каптч вынесите в отдельные конфигурационные файлы?
Нечто подобное есть, но вы пока не можете это редактировать

Можете добавить этот размер каптч?
Добавим в ближайшее время
 

Scov

Client
Регистрация
14.05.2015
Сообщения
4
Благодарностей
0
Баллы
1
Подскажите как использовать CapMonsterModule= не в зенно, хотя бы пример php скрипта. Капмонстер без четкого указания типа капчи отказывается распознавать (Answer is empty) в частности яндекс капчу.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Это возможно только в том случае, если программа ваша позволяет передавать дополнительные параметры запроса к сервисам типа антигейта.
CapMonsterModule=это такой же параметр как, скажем is_russian=1
 

Scov

Client
Регистрация
14.05.2015
Сообщения
4
Благодарностей
0
Баллы
1
Это возможно только в том случае, если программа ваша позволяет передавать дополнительные параметры запроса к сервисам типа антигейта.
CapMonsterModule=это такой же параметр как, скажем is_russian=1
Пробую в php передавать $CapMonsterModule = "ZennoLab.YandexRus", не определяет все равно. Распознаю с помощью примера антигейт http://antigate.com/code/phpnocurl.txt
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 284
Благодарностей
2 728
Баллы
113
ну как бы мало передать его в параметрах, его еще в тело запроса надо вкодировать.
должно быть примерно вот так:

PHP:
<?php
/*
$filename - file path to captcha. MUST be local file. URLs not working
$apikey   - account's API key
$rtimeout - delay between captcha status checks
$mtimeout - captcha recognition timeout

$is_verbose - false(commenting OFF),  true(commenting ON)

additional custom parameters for each captcha:
$is_phrase - 0 OR 1 - captcha has 2 or more words
$is_regsense - 0 OR 1 - captcha is case sensetive
$is_numeric -  0 OR 1 - captcha has digits only
$min_len    -  0 is no limit, an integer sets minimum text length
$max_len    -  0 is no limit, an integer sets maximum text length
$is_russian -  0 OR 1 - with flag = 1 captcha will be given to a Russian-speaking worker

usage examples:
$text=recognize("/path/to/file/captcha.jpg","YOUR_KEY_HERE",true, "antigate.com");

$text=recognize("/path/to/file/captcha.jpg","YOUR_KEY_HERE",false, "antigate.com");  

$text=recognize("/path/to/file/captcha.jpg","YOUR_KEY_HERE",false, "antigate.com",1,0,0,5);  

*/

function recognize(
        $filename,
        $apikey,
        $is_verbose = true,
        $sendhost = "antigate.com",
        $rtimeout = 5,
        $mtimeout = 120,
        $is_phrase = 0,
        $is_regsense = 0,
        $is_numeric = 0,
        $min_len = 0,
        $max_len = 0,
        $is_russian = 0, 
        $capMonsterModule = "")
{
    if (!file_exists($filename))
    {
        if ($is_verbose) echo "file $filename not found\n";
        return false;
    }
    $fp=fopen($filename,"r");
    if ($fp!=false)
    {
        $body="";
        while (!feof($fp)) $body.=fgets($fp,1024);
        fclose($fp);
                $ext=strtolower(substr($filename,strpos($filename,".")+1));
    }
    else
    {
        if ($is_verbose) echo "could not read file $filename\n";
        return false;
    }
   
    if ($ext=="jpg") $conttype="image/pjpeg";
    if ($ext=="gif") $conttype="image/gif";
    if ($ext=="png") $conttype="image/png";
   
   
    $boundary="---------FGf4Fh3fdjGQ148fdh";
   
    $content="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"method\"\r\n";
    $content.="\r\n";
    $content.="post\r\n";
    $content.="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"key\"\r\n";
    $content.="\r\n";
    $content.="$apikey\r\n";
    $content.="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"phrase\"\r\n";
    $content.="\r\n";
    $content.="$is_phrase\r\n";
    $content.="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"regsense\"\r\n";
    $content.="\r\n";
    $content.="$is_regsense\r\n";
    $content.="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"numeric\"\r\n";
    $content.="\r\n";
    $content.="$is_numeric\r\n";
    $content.="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"min_len\"\r\n";
    $content.="\r\n";
    $content.="$min_len\r\n";
    $content.="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"max_len\"\r\n";
    $content.="\r\n";
    $content.="$max_len\r\n";
    $content.="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"is_russian\"\r\n";
    $content.="\r\n";
    $content.="$is_russian\r\n";
    $content.="--$boundary\r\n";
    $content.="Content-Disposition: form-data; name=\"CapMonsterModule\"\r\n";
    $content.="\r\n";
    $content.="$capMonsterModule\r\n";
    $content.="--$boundary\r\n";   
    $content.="Content-Disposition: form-data; name=\"file\"; filename=\"capcha.$ext\"\r\n";
    $content.="Content-Type: $conttype\r\n";
    $content.="\r\n";
    $content.=$body."\r\n";
    $content.="--$boundary--";
   
   
    $poststr="POST http://$sendhost/in.php HTTP/1.0\r\n";
    $poststr.="Content-Type: multipart/form-data; boundary=$boundary\r\n";
    $poststr.="Host: $sendhost\r\n";
    $poststr.="Content-Length: ".strlen($content)."\r\n\r\n";
    $poststr.=$content;
   
   // echo $poststr;
   
    if ($is_verbose) echo "connecting $sendhost...";
    $fp=fsockopen($sendhost,80,$errno,$errstr,30);
    if ($fp!=false)
    {
        if ($is_verbose) echo "OK\n";
        if ($is_verbose) echo "sending request ".strlen($poststr)." bytes...";
        fputs($fp,$poststr);
        if ($is_verbose) echo "OK\n";
        if ($is_verbose) echo "getting response...";
        $resp="";
        while (!feof($fp)) $resp.=fgets($fp,1024);
        fclose($fp);
        $result=substr($resp,strpos($resp,"\r\n\r\n")+4);
        if ($is_verbose) echo "OK\n";
    }
    else 
    {
        if ($is_verbose) echo "could not connect to anti-captcha\n";
        if ($is_verbose) echo "socket error: $errno ( $errstr )\n";
        return false;
    }
   
    if (strpos($result, "ERROR")!==false or strpos($result, "<HTML>")!==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;
    }
}
?>
 
  • Спасибо
Реакции: Scov

Scov

Client
Регистрация
14.05.2015
Сообщения
4
Благодарностей
0
Баллы
1
работает, спасибо
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)