Привет уважаемые, передо мной встала задача с которой (как я думал) справлюсь быстро, да вот я ошибся. Суть проста, сделать скрипт который парсит форму отправки сообщения постеру объявления на сайте slando.ru, на моей странице выводится только капча и моя форма с полем ввода для капчи и сабмит. После того как я ввожу текст капчи, жму сабмит, скрипт через курл отдает пост запрос на отправку сообщения. Проблема в том что в ответ приходит о неверном значении капчи. Код (Text): <?php ignore_user_abort(1); set_time_limit(0); require_once('dom/simple_html_dom.php'); $url = 'http://znakomstva.slando.ru/moskva/ad/message/63716367/14025_1.html'; $headers = array ( 'Accept-Encoding: gzip, deflate', 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3', 'Connection: keep-alive', 'Host: znakomstva.slando.ru', ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 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"); $res = curl_exec($ch); $html = str_get_html($res); foreach ($html->find('.captchabox') as $captcha) { print $captcha; } ?> <form action="" method="post"> <input type="text" name="captcha" /> <input type="submit" value="send" /> <input type="hidden" value="63716367" name="hid"/> </form> <?php if (isset($_POST['captcha'])) { $postfields = array( 'message[adId]' => $_POST['hid'], 'message[email]' => 'mymail@mail.ru', 'message[body]' =>'Текст сообщения, не менее 10ти символов.', 'message[captcha]' => $_POST['captcha'], 'attachment' => '', 'submit_button' => 'Отправить сообщение', ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 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"); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); $result = curl_exec($ch); curl_close($ch); print $result; } ?> Уже мой глаз так намылился что я растерял уверенность в решении данной задачи, больше всего меня мутит что у капчи src динамический т.е. не просто jpg, а фиг пойми как он там генерится. Можете эксперементировать с этим скриптом у себя.. ибо адресат стоит на моё объявление. В общем помогите, направте или подскажите.
Картинку с капчей нужно забирать тем же скриптом, который и саму страничку забирает, на которой капча. Иначе там, скорее всего, две разные сессии получаются - для скрипта и для браузера. И когда скриптом забираешь картинку с капчей - отправляй куки, которые получил, когда забирал страничку с формой, на которой капча. Но вообще, ты наверно что-то нехорошее делаешь.
вероятно две сессии: когда парсится форма - одна и капча одна, а когда курл обращается к форме, формируется новая капча. соответственно первая не будет равна второй.