Помогите спарсить капчу

Discussion in 'PHP' started by wirusoalll, 5 Mar 2012.

  1. wirusoalll

    wirusoalll New Member

    Joined:
    2 Mar 2012
    Messages:
    10
    Likes Received:
    4
    Reputations:
    0
    Добрый день. не могу на сайте http://nsau.edu.ru/student/answers/ правильно скачать капчу. При каждом запросе она меняется. и при скачивании функцией
    $first_img = imagecreatefrompng('http://nsau.edu.ru/captcha/');
    imagepng($first_img,"osssssssss.png");

    в общем для спам бота,который скачает капчу,расшифровывает(скрипт по разгадыванию капчи я уже написал,кому интересно могу скинуть)
     
  2. Arx

    Arx New Member

    Joined:
    14 Jun 2011
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Ну у меня есть только один вариант, генерируй PHPSESSID, и через cUrl грузи капчу.
    Потом когда будешь отправлять Post-запрос, припиши PHPSESSID в куки.
    А то что капча меняется, это нормально.
     
  3. Double777

    Double777 New Member

    Joined:
    17 Aug 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Arx прав тебе нужно куки отправить с сессией
     
  4. wirusoalll

    wirusoalll New Member

    Joined:
    2 Mar 2012
    Messages:
    10
    Likes Received:
    4
    Reputations:
    0
    $curlInit = curl_init("http://nsau.edu.ru/student/answers/");
    curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($curlInit,CURLOPT_HEADER,true);
    curl_setopt($curlInit,CURLOPT_NOBODY,false);
    curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curlInit, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');

    //получаем ответ
    $response = curl_exec($curlInit);
    curl_close($curlInit);

    $sess_cookie=substr($response, strpos($response, "PHPSESSID=")+10, 32);
    echo "<br>PHPSESSID=".$sess_cookie;

    $response = str_replace("/captcha/", "http://nsau.edu.ru/captcha/?PHPSESSID=".$sess_cookie, $response);
    echo $response;

    $first_img = imagecreatefrompng('http://nsau.edu.ru/captcha/?PHPSESSID='.$sess_cookie);
    imagepng($first_img,"osssssssss.png");

    echo "<br>PHPSESSID=".$sess_cookie;
    echo "<br><img src='osssssssss.png'>";
    ?>

    Ну я сделал,только толку,картинка которая сохраняется и которая показывается совершенно разные
     
  5. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Ясен пень, что они разные будут. Но запрос на сравнение текста с первой картинкой будет корректен.
     
  6. wirusoalll

    wirusoalll New Member

    Joined:
    2 Mar 2012
    Messages:
    10
    Likes Received:
    4
    Reputations:
    0
    эмм..ну а как мне сделать что бы её сохранить что бы потом распознать?=(
     
  7. Double777

    Double777 New Member

    Joined:
    17 Aug 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    http://nsau.edu.ru/captcha/
    сюда полученные куки отправляй через заголовки
     
  8. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    1. Заходишь на страницу с капчей, считываешь кукисы/скрытые поля, запоминаешь их.
    2. Скачиваешь картинку, предварительно отправив эти кукисы на капчу.
    3. Распознаешь капчу.
    4. Отправляешь распознанное поле с кукисами на скрипт-обработчик.
    Возможно придется получать кукисы не со страницы с капчей, а со скрипта генератора капчи.
     
    #8 Chaak, 5 Mar 2012
    Last edited: 5 Mar 2012
  9. wirusoalll

    wirusoalll New Member

    Joined:
    2 Mar 2012
    Messages:
    10
    Likes Received:
    4
    Reputations:
    0
    эммм...вот так отправлять заголовки?

    <?php

    $curlInit = curl_init("http://nsau.edu.ru/student/answers/");
    curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($curlInit,CURLOPT_HEADER,true);
    curl_setopt($curlInit,CURLOPT_NOBODY,true);
    curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curlInit, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');

    $response = curl_exec($curlInit);
    curl_close($curlInit);
    //echo $response;
    $sess_cookie=substr($response, strpos($response, "PHPSESSID=")+10, 32);
    echo $sess_cookie."<br>";

    $curl = curl_init("http://nsau.edu.ru/captcha/");
    curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($curl,CURLOPT_HEADER,false);
    curl_setopt($curl,CURLOPT_NOBODY,false);
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/html", "Connection: keep-alive", "Vary: Accept-Encoding", "Set-Cookie: PHPSESSID=".$sess_cookie."; path=/; domain=.nsau.edu.ru"));
    $resp = curl_exec($curl);
    curl_close($curl);
    $fh = fopen('sss.png', "w+");
    fwrite($fh, $resp);



    ?>

    просто я раньше отправлением,да и вообще с функцией curl не имел дела
     
  10. Double777

    Double777 New Member

    Joined:
    17 Aug 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    если не получается через curl попробуй через сокеты, тока с капчей и ответ сервера придет