занялся я изучением curl'a. Подскажите. Пытаюсь написать бота для игры одной(примитивщина). Авторизуюсь(успешно) в игре, перехожу по линке комнаты, в которой надо выполнять действия. теперь собственно вопрос...как поддерживать активность сессии и постоянно не перелогиниваться(там при неактивности выбьет же, а хранимые куки не сохраняют сессию вечно(как на форумах). Действия бот должен выполнять каждые минут 40... постоянные релогины - палево для модераторов игры(у них логи подключений) подскажите алгоритм работы? + там капчу надо угадать если есть у кого желание помочь - стукните в личку)
оно вроде в куках хранится, да? ну там его нет. если я ошибаюсь - можно линки почитать? с примерами желательно p.s. почитал ага. в серверных ответах его нет. так что буду признателен за хелп
Сохраняй кукисы, которые тебе передает сервер. Если спустя 40 минут ты выполняешь какое-нибудь действие в игре, используешь сохраненные ранее кукисы и при этом тебе сервер отвечает, что ты неавторизирован, тогда сниффером смотри, как браузер поддерживает активность сессии. Он может, например, по таймеру скачивать какую нибудь страницу, то есть делать своеобразный пинг - говорить серверу, что в игрока все еще открыт браузер с игрой и он находится в онлайне.
игра построена на фреймах. поддерживается активность обновлением чата(выпиливаешь чат и через пол часа неактивности сессия накрывается.) я делаю вот так - PHP: <?php $act = '1'; $login = 'Sdasda'; $pass = 'asdasda'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL,'http://site.ru/'); curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); curl_setopt($curl, CURLOPT_FAILONERROR, 1); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7'); curl_setopt($curl, CURLOPT_POSTFIELDS,"act-Login=".$act."&login=".$login."&pwd=".$pass); curl_setopt($curl, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); curl_setopt($curl, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); // вот так все ок.. начало $res = curl_exec($curl); curl_setopt($curl, CURLOPT_URL,'http://site.ru/часть фрейма'); $res2 = curl_exec($curl); curl_close($curl); // конец preg_match("/newWin\(\"(.*)\",/", $res, $linke); echo $linke[1]; //а вот так - // $pilka= curl_init(); // curl_setopt($pilka, CURLOPT_URL,'http://site.ru/часть фрейма'); // curl_setopt($pilka, CURLOPT_RETURNTRANSFER,1); // curl_setopt($pilka, CURLOPT_FAILONERROR, 1); // curl_setopt($pilka, CURLOPT_TIMEOUT, 30); // curl_setopt($pilka, CURLOPT_POST, true); // curl_setopt($pilka, CURLOPT_FOLLOWLOCATION, 1); // curl_setopt($pilka, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7'); // curl_setopt($pilka, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); // curl_setopt($pilka, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); // $resp = curl_exec($pilka); // curl_close($pilka); // print_r($resp); //// ?> // возвращает null. т.е. страница уже неавторизована. хотя куки достаются с файла
Значит нужно самому поддерживать активность сессии, обновляя чат. Можно всегда держать запущенным (или запускать через cron) скрипт, который обновляет чат и переавторизируется в игре, если случайно игрока выкинуло по каким то причинам в оффлайн. Или можно сразу в главном скрипте все делать, запоминая время, через которое нужно выполнять следующее действие в игре и напротяжении этого времени в цыкле обновлять чат через заданый промежуток времени и т. д.
но сессия слетает тут же. даже с прикрученными куками. а авториз в игре без чата спадает через пол часа) если есть желание помочь - в личк) // все сделал, все отлично спасибо. Теперь осталось капчу научиться выдирать.