PDA

Просмотр полной версии : Вытаскивание капчи


programming
26.08.2009, 22:29
Нужно вытащить капчу с сайта.. Реализовать нужно с помощью php..
Теперь о самой капче. На странице с формой если смотреть капчу, то она имеет примерно такой url: http://example.com/captcha/fbead8c8a3e5f23cb656b7c0c393fcf9
Вот вопрос и возникает - как достать такую капчу когда её url постоянно меняется?
И главная проблема получить что-то типа этого - fbead8c8a3e5f23cb656b7c0c393fcf9.. Когда я смотрю через браузер firefox с плагином httpfox, то могу посмотреть ответ сервера(если это так называется) - вот ответ страницы, на которой располагается капча:
(Request-Line) GET /register/?from=button HTTP/1.1
Host example.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset UTF-8,*
Keep-Alive 300
Connection keep-alive
Referer http://example.com
Cache-Control max-age=0

Из этого я ничего интересного не вижу..
Но если посмотреть ответ капчи, то вот:
(Request-Line) GET /captcha/fbead8c8a3e5f23cb656b7c0c393fcf9 HTTP/1.1
Host example.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2
Accept image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language ru,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset UTF-8,*
Keep-Alive 300
Connection keep-alive
Referer http://example.com/register/?from=button

Если первый ответ я ещё могу получить с помощью curl, то второй не понимаю как получить..
Помогите, пожалуйста, вытащить эти магические символы - fbead8c8a3e5f23cb656b7c0c393fcf9..
Заранее спасибо.

mr.The
27.08.2009, 00:00
проблема вытащить линк?
регулярные выражения в помощ.

d_x
27.08.2009, 01:02
Необходимо сначала получить контент страницы, на которой отображается капча. Там в HTML-коде будет нечто вроде

<img src="/captcha/fbead8c8a3e5f23cb656b7c0c393fcf9" />

Вытащить этот идентификатор можно, как уже сказали выше, с помощью регулярных выражений (смотри хелп по функции preg_match, по PCRE).

geforse
27.08.2009, 10:13
И главная проблема получить что-то типа этого - fbead8c8a3e5f23cb656b7c0c393fcf9

preg_match('#/captcha/(.*?)"#i',$result,$captcha);

programming
27.08.2009, 12:04
Огромное спасибо! Получилось..
Вот только в регулярных выражениях я плохо ориентируюсь.. Можете объяснить почему, как я понял, (.*?)"#i обозначает fbead8c8a3e5f23cb656b7c0c393fcf9?
Спасибо.

b3
27.08.2009, 13:32
http://www.devnotes.ru/regexp.png
http://phpclub.ru/detail/article/regexp_1
http://phpclub.ru/detail/article/regexp_2

Выражение (.*?) найдет ВСЕ до конца строки. В данном случае #/captcha/(.*?)"#i найдет все до момента где встретит " (двойные ковычки).

programming
27.08.2009, 13:46
А.. Понял. Спасибо.