Проблема с антигейтом! Помогите!

Discussion in 'PHP' started by JaxMackey, 18 Nov 2014.

  1. JaxMackey

    JaxMackey New Member

    Joined:
    10 Oct 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    :( Проблема в том что по какой то причини сервис антигейта постоянно выдает ошибку ERROR_ZERO_CAPTCHA_FILESIZE. капча лежит в папке скрипта весит в среднем 2-3 кб. обычное изображение капчи. путь в скрипте указан верно до капчи. все передаться. нормально. но ошибка все равно имеется. Пробывал как и jpg, png так и закодированную капчу отправлять.

    часть кода где капча сохраняется вот
    Code:
        if(substr_count($captch[0], 'captcha.php'))
        {
        echo 'CH';
        preg_match( '/captcha.php\?sid=(.*)&s=1/', $chek , $img );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'm.vseti.by/captcha.php?sid='.$img[1].'&s=1');
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
        curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
        curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_VERBOSE, $m);
         
        $res=curl_exec($ch);
        curl_close($ch);
         
        file_put_contents("captcha.jpg", $res);
         
        recognize(); 
    А вот сам функция который отправляет капчу на антигейт. отправляю закодированную капчу

    Code:
        function recognize(
        $filename = './captcha.jpg',
        $apikey = 'мой ключ',
        $is_verbose = true,
        $domain="antigate.com/in.php",
        $rtimeout = 5,
        $mtimeout = 120,
        $is_phrase = 0,
        $is_regsense = 0,
        $is_numeric = 0,
        $calc = 0,
        $min_len = 0,
        $max_len = 0,
        $is_russian = 0
        )
        {
        if (!file_exists($filename))
        {
        if ($is_verbose) echo "file $filename not found\n";
        return false;
        }
        $postdata = array(
        'method' => 'base64',
        'key' => $apikey,
        'body' => $captcha, //капча в base64
        'phrase' => $is_phrase,
        'regsense' => $is_regsense,
        'numeric' => $is_numeric,
        'calc' => $calc,
        'min_len' => $min_len,
        'max_len' => $max_len,
        'is_russian'=> $is_russian
         
        );
         
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://$domain/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);
        curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
         
        $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://$domain/res.php?key=".$apikey.'&action=get&id='.$captcha_id);
        die(var_dump($result ));
        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;
        }
        }
        ?> 
    Вот что в консоле при отправке капчи.
    http://pixs.ru/showimage/antipng_7438657_14772460.png

    Вот сохраненная капча.
    http://pixs.ru/showimage/captchajpg_3926832_14772481.jpg

    За вознаграждение помогите! второй день туплю уже. 614 504 229 icq
     
    #1 JaxMackey, 18 Nov 2014
    Last edited: 18 Nov 2014
  2. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    Вот там:
    $domain="antigate.com/in.php",
    И потом:
    curl_setopt($ch, CURLOPT_URL, "http://$domain/in.php");
    и в консолке даже видно что скрипт постит в адрес http://antigate.com/in.php/in.php
    по нормальному антигейт ошибку должен был бы выдать 404.

    сделайте $domain="antigate.com",

    PS. еще по нормальному лучше указывать полный путь к файлу, а не $filename = './captcha.jpg'
     
    #2 Art!P, 18 Nov 2014
    Last edited: 18 Nov 2014