Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: капча

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
arabon
Отправлено: 08 Августа, 2012 - 21:16:20
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Всем доброго времени суток!

У меня небольшая проблема при работе с капчей... Распознаватель капчи я успешно написал, а вот проблема у меня в следующем.
1) Вначале я отправляю get-запрос на страницу www[dot]site[dot]com/captcha.php
2) Я достаю куки, в них лежат phpsessid и xz_code_captcha
3) Сохраняю картинку и распознаю
4) Отправляю post запрос с параметрами и куками из пункта два.

Но фишка в том, что когда я отправляю пост запрос, то там уже другая капча, то есть куки из пункта 2 никак не влияют на это.

PHP:
скопировать код в буфер обмена
  1. $ch = curl_init('site.com/index.php?lang=en&catid=8&subcatid=69&shortcutregion=&');    
  2. curl_setopt ($ch, CURLOPT_HEADER, 1); // получать заголовки
  3.     curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/      2008092417 Firefox/3.0.3');
  4.    // curl_setopt ($ch, CURLOPT_REFERER, 'site.com');
  5.     curl_setopt ($ch, CURLOPT_POST, 1); // использовать метод POST
  6.     curl_setopt ($ch, CURLOPT_POSTFIELDS, $data); // передаем поля формы
  7.     curl_setopt($ch,CURLOPT_FOLLOWLOCATION, TRUE);
  8.     curl_setopt ($ch, CURLOPT_COOKIE, $cookie); //куки примерно вида PHPSESSID=6b5f43157eab876b067b0901c41ca5ed; xz_captcha_code=b7144948aa7d0f4780c5363cb6b193c1
  9.     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);// возвращать результат работы
  10.     //curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); // не проверять SSL сертификат
  11.     //curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); // не проверять Host SSL сертификата
  12.     //curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Expect:')); // это необходимо, чтобы cURL не высылал заголовок на  ожидание  
  13.     $result=curl_exec($ch);
  14.     //$result = curl_multi_getcontent ($ch);
  15.     curl_close($ch);  
  16.     echo $result;
  17.  
  18.  


Также игрался с liveHTTPreplay и каждом новом запросе и старыми куками появлялась новая капча.
Если нужна более подробная информация, то спрашивайте.
 
 Top
Runet4ik
Отправлено: 08 Августа, 2012 - 21:33:18
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  
Откуда: Россия


Помог: 0 раз(а)




Почему в url у тебя get-запрос? Ты одновременно пытаешься послать и гет и пост... И куда ты сохраняешь куки?
Это так делается:
PHP:
скопировать код в буфер обмена
  1.  
  2. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies');
  3. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies');
  4.  
 
 Top
arabon
Отправлено: 08 Августа, 2012 - 21:48:46
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




1) там пост запрос 100%, могу показать данные firebug`a, ссылка действительно похожа на get запрос, но через него отправляется пост запрос. как то так=)
2)
PHP:
скопировать код в буфер обмена
  1. $ch = curl_init();
  2. curl_setopt($ch, CURLOPT_URL, 'site.com/captcha.php');
  3. curl_setopt($ch, CURLOPT_HEADER, true);
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  5. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
  6. $data = curl_exec($ch);
  7. $header=substr($data,0,curl_getinfo($ch,CURLINFO_HEADER_SIZE));
  8. $body=substr($data,curl_getinfo($ch,CURLINFO_HEADER_SIZE));//тут лежит картинка
  9. preg_match_all("/Set-Cookie: (.*?)=(.*?);/i",$header,$res);
  10. $cookie='';
  11. $i=0;
  12. foreach ($res[1] as $key => $value) {
  13.  else $cookie.= $value.'='.$res[2][$key].'; ';
  14. };
  15. echo "$cookie";

(Отредактировано автором: 08 Августа, 2012 - 21:50:25)

 
 Top
Мелкий Супермодератор
Отправлено: 08 Августа, 2012 - 21:54:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Runet4ik пишет:
Ты одновременно пытаешься послать и гет и пост...

И что?

arabon, кажется, вы упускаете саму цель капчи. Ведь капча стоит на какой-то форме? Для нормальной эмуляции браузера, надо запросить страницу с этой формы, сохранить куки, запросить изображение капчи с этими куками, распознать его и послать запрос на action формы из страницы с формой, опять же с куками.


-----
PostgreSQL DBA
 
 Top
Runet4ik
Отправлено: 08 Августа, 2012 - 22:10:29
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  
Откуда: Россия


Помог: 0 раз(а)




Мелкий пишет:
Runet4ik пишет:
Ты одновременно пытаешься послать и гет и пост...

И что?

arabon, кажется, вы упускаете саму цель капчи. Ведь капча стоит на какой-то форме? Для нормальной эмуляции браузера, надо запросить страницу с этой формы, сохранить куки, запросить изображение капчи с этими куками, распознать его и послать запрос на action формы из страницы с формой, опять же с куками.


Д ни что... Я это говорю к тому, что возможно чел-к намудрил что-то с адресами... Как видно из его поста, он шлёт гет по адресу captcha.php, оттуда же берёт и куки, хотя скорее по этому адресу нужно брать саму капчу, а куки со страницы формы, что скорее всего как раз таки является index.php ...
 
 Top
arabon
Отправлено: 08 Августа, 2012 - 22:11:16
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Мелкий пишет:

arabon, кажется, вы упускаете саму цель капчи. Ведь капча стоит на какой-то форме? Для нормальной эмуляции браузера, надо запросить страницу с этой формы, сохранить куки, запросить изображение капчи с этими куками, распознать его и послать запрос на action формы из страницы с формой, опять же с куками.


Только что попробовал сделать через liveHTTPreplay и ничего не получилось. Либо он глюченный и не работает, либо еще что то Однако Потому что при ручной отправке одних и тех же кукисов приходит всегда разные картинки. (или я что то не так понимаю =) )
При переходе на первоначальную страницу, как я понял, сразу же отправляется get запрос на site.com/captcha.php с кукисами первоначальной страницы, дальше передается капча на первоначальную страницу.
(Добавление)
Попробую сделать:

1. get запрос на index.php?... чтобы получить куки
2. отправить get запрос на captcha.php с полученными куками
3. получить и распознать картинку
4. отправить post запрос с куками из п.1
 
 Top
Runet4ik
Отправлено: 08 Августа, 2012 - 22:23:32
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  
Откуда: Россия


Помог: 0 раз(а)




Для начала берёшь страницу с формой и капчей, сохраняешь куки, потом с этими куками идёшь по адресу где непосредственно находится сама только капча, берёшь её, разгадываешь, после чего уже шлёшь пост на файл обработчик с теми же куками...
 
 Top
Мелкий Супермодератор
Отправлено: 09 Августа, 2012 - 09:33:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




arabon пишет:
Потому что при ручной отправке одних и тех же кукисов приходит всегда разные картинки. (или я что то не так понимаю =) )

Покопайте код пары капч - и поймёте Подмигивание
Наиболее рациональный способ выдать капчу, предусмотреть функцию "показать другую" и при этом не копипастить код - сделать генерацию значения капчи при вызове самой капчи. Новое сгенерированное значение отрисовывается и сохраняется в сессию. А уже обработчик формы проверяет, совпадают ли 2 значения. Потому закономерно на каждое обращение к капче выводится новая картинка.


-----
PostgreSQL DBA
 
 Top
arabon
Отправлено: 09 Августа, 2012 - 20:42:34
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Все получилось, спасибо!)

(Отредактировано автором: 10 Августа, 2012 - 01:16:17)

 
 Top
ytrewq123
Отправлено: 10 Ноября, 2014 - 18:18:53
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Здравствуйте!
У меня вопросик. Имею капчу нарыл, как говорится подпилил для себя. Всё супер мне нравится работает. Но одна проблемка тут размер шрифта внутренний определён функцией и можно не больше 5. Но это маловато. Не подскажите как мне и что изменить , чтобы я мог менять размер шрифта.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $imaget1da = imagecreatetruecolor(189,30);
  4. $redt1da = imagecolorallocatealpha($imaget1da,rand(0,225),rand(0,225),rand(0,225),100);
  5.  
  6. $blackt1da = imagecolorallocate($imaget1da, 0,0,0);
  7. $wt1da = imagecolorallocate ($imaget1da,255,255,255);
  8.  
  9. imagefill($imaget1da ,0,0, $redt1da);
  10. $kodt1da = "";
  11. $arrayt1da = array ("a","s","e","f","g","1","2","3","4");
  12. for ($i=0; $i<=4; $i++)
  13. {
  14.     $kodt1da .= $arrayt1da[rand(0,count($arrayt1da) - 1)];
  15. }
  16. $_SESSION ['kodt1da'] = $kodt1da;
  17. imagestring($imaget1da,5,28,5,$kodt1da,$wt1da);
  18.  
  19. imagepng($imaget1da);
  20. imagedestroy($imaget1da);
  21. ?>
  22.  
  23.  
 
 Top
teddy
Отправлено: 10 Ноября, 2014 - 18:24:29
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




 
 Top
ytrewq123
Отправлено: 10 Ноября, 2014 - 18:42:05
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Спасибо. Я сам много и долго рыл. И вроде пробовал и эту функцию. То есть добавлял какой то шрифт и добавлял его в строку что ещё надо выводить. Но тогда её просто нет. Может я не туда добавлял не уточните что именно изменить.
Вот так.

$z='arial.ttf';

imagettftext($imaget1da,5,28,5,$kodt1da,$wt1da,$z);


И ещё наткнулся на такие высказывания.
«“А ещё проще – использовать функцию imagettftext()”
Но сложнее найти хостинг где эта гавнофункция работает »
 
 Top
teddy
Отправлено: 10 Ноября, 2014 - 19:39:01
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Не согласен с высказыванием. Бред.

Что касается Вашей проблемы, включите вывод ошибок.
Либо путь до ttf файла указан неверно либо параметры переданы некорректным образом.
 
 Top
ytrewq123
Отправлено: 10 Ноября, 2014 - 19:49:24
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Ладно, спасибо. Постараюсь разобраться. Спасибо.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB