Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подтверждение yandex капчи, Отослать правильный ответ 
:(
    Опции темы
neoks
Дата 17.7.2011, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Написал маленький код на CURL, который обращается к яндексу и получает станицу с качай.
Дальше я смотрю на картинку и ввожу в свое поле номер капчи и с помощью курл пытаюсь отослать ответ.

То есть спрятанные поля и все что там есть вытаскиваю с помощью preg_match(), после чего отправляю к яши.

Но не пойму почему он не принимает.

Вот сам код:

Код

<?

header('Content-type: text/html; charset=windows-1251');

?>
<style>
body{
    padding: 10px;
    margin: 0;
    background: #ECECEC;
    font-family: Tahoma;
    font-size: 11px;
    color: #939393;
}
pre{

}
ul{
    margin: 0;
    padding: 0;
    list-style: none;
}
</style>

<?
function get_capha(){
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,             "http://yandex.ru/yandsearch?text=denver.tu&site=denver.ru&numdoc=50&lr=1");
    curl_setopt($ch, CURLOPT_TIMEOUT,             60);
    curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.00 (Windows NT 5.1; U; ru)"); // Прикинемся браузером.
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); // follow redirects recursively
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Возвращать трансфер или печатать напрямую
    $TMP = curl_exec($ch);
    
    $in_charset = 'windows-1251';
    if (preg_match('/charset=([^ ]*)[\"\']/i', $TMP, $response)){
    $in_charset = $response[1];
    }
    if($in_charset == 'UTF-8' or $in_charset == 'utf-8'){
    $TMP = mb_convert_encoding($TMP, 'windows-1251', $in_charset);
    }
    
    print $TMP;
            
    if(preg_match("'<table\sclass=[\"\']b-captcha__layout[\"\'][^>]*>.*?<img\ssrc=[\"\'](.*?)[\"\']'si",$TMP,$img)){
        //if(!copy($img[1],ROOT_DIR.'/data/cache/capha.jpg')) print 'No copy image'."\n";
        //else{
            
            preg_match("'<input\sname=[\"\']key[\"\'].*?value=[\"\'](.*?)[\"\']'si",$TMP,$key);
            preg_match("'<input\sname=[\"\']retpath[\"\'].*?value=[\"\'](.*?)[\"\']'si",$TMP,$retpath);
            
            print <<<HTML
            <form method="POST">
            <input type="hidden" name="key" value="{$key[1]}" />
            <input type="hidden" name="retpath" value="{$retpath[1]}" />
            <input name="rep" value="" />
            <input type="submit" value="Отправить" />
            </form>
HTML;

        //}
    }
    else{
        print 'Шаблон для поиска капчи не найден'."\n";
    }
}

function post_capha(){
            $get      = '?key='.$_POST['key'].'&retpath=http://yandex.ru/yandsearch?text=denver.tu&site=denver.ru&numdoc=50&lr=1&rep='.$_POST['rep'].'';
            $get_post = 'key='.$_POST['key'].'&retpath='.$_POST['retpath'].'&rep='.$_POST['rep'].'';
            
            $post = array('key' => $_POST['key'], 'retpath' => $_POST['retpath'], 'rep' => $_POST['rep']);
            
            print $get;
            
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,             "http://yandex.ru/checkcaptcha".$get);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,     1);
            curl_setopt($ch, CURLOPT_POST,                 1);
            curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.00 (Windows NT 5.1; U; ru)"); // Прикинемся браузером.
            curl_setopt($ch, CURLOPT_REFERER, 'http://captcha.yandex.ru'); 
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); // follow redirects recursively
            curl_setopt($ch, CURLOPT_POSTFIELDS,         $post);
            $TMP = curl_exec($ch);
            
            print $TMP;

            $in_charset = 'windows-1251';
            if (preg_match('/charset=([^ ]*)[\"\']/i', $TMP, $response)){
            $in_charset = $response[1];
            }
            if($in_charset == 'UTF-8' or $in_charset == 'utf-8'){
            $TMP = mb_convert_encoding($TMP, 'windows-1251', $in_charset);
            }
            
            print $TMP;
}

if(!$_POST['key']) get_capha();
else post_capha();
?>


Кто может видел или знает как правильно сделать подскажите пожалуйста.  smile 
PM MAIL   Вверх
mark2011
Дата 17.7.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 28.6.2011

Репутация: 2
Всего: 2



Что-то я не пойму, с чего вы вообще взяли, что по указанному адресу будет располагаться код капчи? Ссылка, которая приведена у вас в коде, ведёт на поисковый запрос, который, в свою очередь, не даёт никаких результатов. А капча появится только в том случае, если запросы с вашего IP будут походить на автоматические. Это раз. А два - где написано, что у яндекса есть механизм, позволяющий такое вытворять и вообще, что это законно с точки зрения яндекса?...

Приведу пример. У меня сейчас интернет-проект, там, конечно, фигурирует капча. Только recaptcha, но суть от этого не меняется. Так вот если бы я увидел в логах много сторонних запросов именно к странице капчи, я бы как минимум посчитал, что меня пытаются взломать, как максимум - обратился бы к интернет-провайдеру с просьбой заблокировать данный IP, а возможно и всю подсеть...

Так что вот, думайте...

P. S. Ещё раз перечитал письмо, понял вас. Но всё равно, вот это:

Код

curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.00 (Windows NT 5.1; U; ru)"); // Прикинемся браузером.
curl_setopt($ch, CURLOPT_REFERER, 'http://captcha.yandex.ru'); 


а особенно вот это:
Цитата

// Прикинемся браузером
 выглядит по меньшей мере странно... по большей это смахивает на хак... ибо можно в цикле таких запросов зафигачить 100000 и тот сервак просто грохнется... так что всё равно очень странно...
...

Это сообщение отредактировал(а) mark2011 - 17.7.2011, 20:19
PM WWW ICQ Skype   Вверх
neoks
Дата 17.7.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата(mark2011 @  17.7.2011,  20:16 Найти цитируемый пост)
Что-то я не пойму, с чего вы вообще взяли, что по указанному адресу будет располагаться код капчи? 

По этому адресу я получаю статистику сайта, но не тут то было, когда выскакивает капча яши.
Помню когда раньше у меня был IP не статический бывало сталкивался с капчей и знаю что если ввести правильно код то можно избавится от капчи.

Мой скрипт переборщил с запросами и вот результат наткнулся на капчу, пришлось делать скрипт с которым можмо былобы ввести код и избавится от капчи.

Код вижу но вот как отправить этот код.

Вот кстати сама форма яши.

Код

<form action="http://yandex.ru/checkcaptcha" method="GET">
              <input name="key" type="hidden" value="30fvxPEX4znWkiW2GkqC2bsl8oEwLb8P_0/1310918785/13ebc2ba6544df8b313771465f009652_049679e9d694811a4a333793121579c6">
              <input name="retpath" type="hidden" value="http%3A//yandex.ru/yandsearch%3Ftext%3Ddenver.tu%26site%3Ddenver.ru%26numdoc%3D50%26lr%3D1">

              <table class="b-captcha__layout">
                <tr>
                  <td><img src="http://yandex.ru/captchaimg?aHR0cDovL3UuY2FwdGNoYS55YW5kZXgubmV0L2ltYWdlP2tleT0zMGZ2eFBFWDR6bldraVcyR2txQzJic2w4b0V3TGI4UA,,_0/1310918785/13ebc2ba6544df8b313771465f009652_caf7f160781a6fee0ff38c0d37f58813" class="b-captcha__image" /></td>

                  <td><a href="javascript:void(0)" onClick="location.reload()">Показать другие
                  цифры</a></td>

                  <td class="b-captcha__layout__g"></td>

                  <td class="b-captcha__layout__r"><a href=
                  "http://xml.yandex.ru/" class=
                  "b-captcha__xml-link">Яндекс.XML</a> сервис для
                  хороших роботов</td>

                </tr>

                <tr>
                  <td><input name="rep" id="rep-id" class=
                  "b-captcha__input" autocomplete="off" />
                  </td>

                  <td colspan="3"><input type="submit" value=
                  "Отправить" class="b-captcha__submit" /></td>
                </tr>
              </table>
            </form>


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1987 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.