curl авторизация + поддержание сессии.

Discussion in 'PHP' started by justonline, 14 Jan 2012.

  1. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    532
    Likes Received:
    61
    Reputations:
    53
    занялся я изучением curl'a.
    Подскажите.
    Пытаюсь написать бота для игры одной(примитивщина).
    Авторизуюсь(успешно) в игре, перехожу по линке комнаты, в которой надо выполнять действия. теперь собственно вопрос...как поддерживать активность сессии и постоянно не перелогиниваться(там при неактивности выбьет же, а хранимые куки не сохраняют сессию вечно(как на форумах).
    Действия бот должен выполнять каждые минут 40... постоянные релогины - палево для модераторов игры(у них логи подключений) подскажите алгоритм работы?

    + там капчу надо угадать :) если есть у кого желание помочь - стукните в личку)
     
    #1 justonline, 14 Jan 2012
    Last edited: 14 Jan 2012
  2. daniel777

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

    Joined:
    8 Jul 2010
    Messages:
    520
    Likes Received:
    90
    Reputations:
    37
    Хранить и передавать PHPSESSID
     
  3. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    532
    Likes Received:
    61
    Reputations:
    53
    оно вроде в куках хранится, да? ну там его нет.
    если я ошибаюсь - можно линки почитать? с примерами желательно

    p.s. почитал ага. в серверных ответах его нет. так что буду признателен за хелп
     
    #3 justonline, 14 Jan 2012
    Last edited: 14 Jan 2012
  4. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    532
    Likes Received:
    61
    Reputations:
    53
    ну-с... может кто?)
     
  5. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    939
    Likes Received:
    162
    Reputations:
    27
    Сохраняй кукисы, которые тебе передает сервер. Если спустя 40 минут ты выполняешь какое-нибудь действие в игре, используешь сохраненные ранее кукисы и при этом тебе сервер отвечает, что ты неавторизирован, тогда сниффером смотри, как браузер поддерживает активность сессии. Он может, например, по таймеру скачивать какую нибудь страницу, то есть делать своеобразный пинг - говорить серверу, что в игрока все еще открыт браузер с игрой и он находится в онлайне.
     
  6. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    532
    Likes Received:
    61
    Reputations:
    53
    игра построена на фреймах. поддерживается активность обновлением чата(выпиливаешь чат и через пол часа неактивности сессия накрывается.)
    я делаю вот так -
    PHP:
    <?php 
    $act 
    '1';
    $login 'Sdasda'
    $pass 'asdasda'
    $curl curl_init(); 
    curl_setopt($curlCURLOPT_URL,'http://site.ru/'); 
    curl_setopt($curlCURLOPT_RETURNTRANSFER,1); 
    curl_setopt($curlCURLOPT_FAILONERROR1); 
    curl_setopt($curlCURLOPT_TIMEOUT30); 
    curl_setopt($curlCURLOPT_POSTtrue); 
    curl_setopt($curlCURLOPT_FOLLOWLOCATION1);
     
    curl_setopt($curlCURLOPT_USERAGENT'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7'); 
    curl_setopt($curlCURLOPT_POSTFIELDS,"act-Login=".$act."&login=".$login."&pwd=".$pass); 
    curl_setopt($curlCURLOPT_COOKIEFILE$_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); 
    curl_setopt($curlCURLOPT_COOKIEJAR$_SERVER['DOCUMENT_ROOT'].'/cookie.txt');

    // вот так все ок.. начало


     
    $res curl_exec($curl); 
    curl_setopt($curlCURLOPT_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. т.е. страница уже неавторизована. хотя куки достаются с файла
     
    #6 justonline, 15 Jan 2012
    Last edited: 15 Jan 2012
  7. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    939
    Likes Received:
    162
    Reputations:
    27
    Значит нужно самому поддерживать активность сессии, обновляя чат. Можно всегда держать запущенным (или запускать через cron) скрипт, который обновляет чат и переавторизируется в игре, если случайно игрока выкинуло по каким то причинам в оффлайн. Или можно сразу в главном скрипте все делать, запоминая время, через которое нужно выполнять следующее действие в игре и напротяжении этого времени в цыкле обновлять чат через заданый промежуток времени и т. д.
     
  8. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    532
    Likes Received:
    61
    Reputations:
    53
    но сессия слетает тут же. даже с прикрученными куками. а авториз в игре без чата спадает через пол часа)
    если есть желание помочь - в личк)

    // все сделал, все отлично :) спасибо.

    Теперь осталось капчу научиться выдирать.
     
    #8 justonline, 15 Jan 2012
    Last edited: 15 Jan 2012
Loading...