За последние 24 часа нас посетили 18050 программистов и 1655 роботов. Сейчас ищут 1547 программистов ...

Не могу правильно взять капчу

Тема в разделе "Прочие вопросы по PHP", создана пользователем media, 11 мар 2012.

  1. media

    media Активный пользователь

    С нами с:
    5 мар 2012
    Сообщения:
    1
    Симпатии:
    0
    Привет уважаемые, передо мной встала задача с которой (как я думал) справлюсь быстро, да вот я ошибся. Суть проста, сделать скрипт который парсит форму отправки сообщения постеру объявления на сайте slando.ru, на моей странице выводится только капча и моя форма с полем ввода для капчи и сабмит. После того как я ввожу текст капчи, жму сабмит, скрипт через курл отдает пост запрос на отправку сообщения. Проблема в том что в ответ приходит о неверном значении капчи.
    Код (Text):
    1. <?php
    2.  
    3. ignore_user_abort(1);
    4. set_time_limit(0);
    5. require_once('dom/simple_html_dom.php');
    6. $url = 'http://znakomstva.slando.ru/moskva/ad/message/63716367/14025_1.html';
    7. $headers = array
    8. (
    9. 'Accept-Encoding: gzip, deflate',
    10. 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
    11. 'Connection: keep-alive',
    12. 'Host: znakomstva.slando.ru',
    13. );
    14.  
    15. $ch = curl_init();
    16.     curl_setopt($ch, CURLOPT_URL, $url);
    17.     curl_setopt($ch, CURLOPT_REFERER, $url);
    18.     curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
    19.     curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
    20.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    21.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    22.     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    23.     curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7");
    24.     $res = curl_exec($ch);
    25.     $html = str_get_html($res);
    26.     foreach ($html->find('.captchabox') as $captcha) {
    27.       print $captcha;
    28.     }
    29. ?>
    30.  
    31. <form action="" method="post">
    32.     <input type="text" name="captcha" />
    33.     <input type="submit" value="send" />
    34.     <input type="hidden" value="63716367" name="hid"/>
    35. </form>
    36.  
    37. <?php
    38. if (isset($_POST['captcha'])) {
    39.  
    40.     $postfields = array(
    41.       'message[adId]' => $_POST['hid'],
    42.       'message[email]' => 'mymail@mail.ru',
    43.       'message[body]' =>'Текст сообщения, не менее 10ти символов.',
    44.       'message[captcha]' => $_POST['captcha'],
    45.       'attachment' => '',
    46.       'submit_button' => 'Отправить сообщение',
    47.     );
    48.  
    49.     $ch = curl_init();
    50.     curl_setopt($ch, CURLOPT_URL, $url);
    51.     curl_setopt($ch, CURLOPT_HEADER, 1);
    52.     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    53.     curl_setopt($ch, CURLOPT_POST, 1);
    54.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    55.     curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
    56.     curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7");
    57.     curl_setopt($ch, CURLOPT_REFERER, $url);
    58.     curl_setopt($ch, CURLOPT_HEADER, 1);
    59.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    60.     curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
    61.     curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
    62.     $result = curl_exec($ch);
    63.  
    64.     curl_close($ch);
    65.  
    66.     print $result;
    67.  
    68. }
    69. ?>
    Уже мой глаз так намылился что я растерял уверенность в решении данной задачи, больше всего меня мутит что у капчи src динамический т.е. не просто jpg, а фиг пойми как он там генерится. Можете эксперементировать с этим скриптом у себя.. ибо адресат стоит на моё объявление.
    В общем помогите, направте или подскажите.
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Картинку с капчей нужно забирать тем же скриптом, который и саму страничку забирает, на которой капча. Иначе там, скорее всего, две разные сессии получаются - для скрипта и для браузера. И когда скриптом забираешь картинку с капчей - отправляй куки, которые получил, когда забирал страничку с формой, на которой капча.

    Но вообще, ты наверно что-то нехорошее делаешь.
     
  3. Denis.Y

    Denis.Y Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    145
    Симпатии:
    0
    Адрес:
    Россия, Самарская область
    вероятно две сессии: когда парсится форма - одна и капча одна, а когда курл обращается к форме, формируется новая капча. соответственно первая не будет равна второй.