Вытаскивание капчи

Discussion in 'PHP' started by programming, 26 Aug 2009.

  1. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Нужно вытащить капчу с сайта.. Реализовать нужно с помощью 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..
    Заранее спасибо.
     
  2. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    проблема вытащить линк?
    регулярные выражения в помощ.
     
  3. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Необходимо сначала получить контент страницы, на которой отображается капча. Там в HTML-коде будет нечто вроде
    Code:
    <img src="/captcha/fbead8c8a3e5f23cb656b7c0c393fcf9" />
    
    Вытащить этот идентификатор можно, как уже сказали выше, с помощью регулярных выражений (смотри хелп по функции preg_match, по PCRE).
     
  4. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    PHP:
    preg_match('#/captcha/(.*?)"#i',$result,$captcha);
     
    1 person likes this.
  5. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Огромное спасибо! Получилось..
    Вот только в регулярных выражениях я плохо ориентируюсь.. Можете объяснить почему, как я понял, (.*?)"#i обозначает fbead8c8a3e5f23cb656b7c0c393fcf9?
    Спасибо.
     
  6. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    http://www.devnotes.ru/regexp.png
    http://phpclub.ru/detail/article/regexp_1
    http://phpclub.ru/detail/article/regexp_2

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

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    А.. Понял. Спасибо.