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

Тема в разделе "PHP", создана пользователем Muntik, 10 янв 2011.

Модераторы: latteo
  1. Muntik

    Muntik

    Регистр.:
    3 июн 2008
    Сообщения:
    457
    Симпатии:
    88
    Доброго времени суток NWS.
    Прошу помощи в написании скрипта ( не тупо взять и выложить готовое решение под мои нужды а именно попытаться донести что и как происходит)

    Задача следующая :

    Скрипт заходит на

    forums.kuban.ru/forum


    проверяет залогинен он или нет, если нет то логинется.

    Далее в заданной теме :

    viewtopic_new.php?t="идтемы"

    он постит сообщение, которое берет из файла

    в идеале чтобы был файл config.php :
    Вот прошу помощи в реализации такой задумки.
     
  2. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Сложно написать это с 0 на РНР. Есть такой программный продукт как Xedant Human Emulator. Подобные задачи решает легко и непринужденно ;)
     
  3. Muntik

    Muntik

    Регистр.:
    3 июн 2008
    Сообщения:
    457
    Симпатии:
    88
    С продуктом знаком, то требуется реализация на пхп
     
  4. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    берешь курл

    и http снифер

    и все эти действия проделываешь и смотришь что и куда отправляется

    какой-то конкретный вопрос - задавай. а пока не понятно чем тебе помогать
     
  5. Muntik

    Muntik

    Регистр.:
    3 июн 2008
    Сообщения:
    457
    Симпатии:
    88
    Всем спасибо ничего не работает )



    PHP:
    <?php

        $login 
    '---';
        
    $pass '---';
        
    $id '---';
        
    $content 'Это содержимое';
            
    $user_agent 'Opera/9.25 (Windows NT 6.0; U; ru)';

        
    // Создаем подключение
        
    if( $curl curl_init() ){

            
    // Нужно загрузить главную страницу бобра
            
    curl_setopt($curl,CURLOPT_URL,'http://forums.kuban.ru/forum/viewtopic_new.php?t=$id');

            
    // Нужно помнить кукисы!
            
    curl_setopt($curlCURLOPT_COOKIESESSIONTRUE);
            
    curl_setopt($curlCURLOPT_COOKIEFILE"cookiefile");

            
    // Скачанный код возвращаем в переменную а не в поток
            
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);

            
    // "Следовать туда, куда зовут". Если сервис выдает 302 код, мы следуем по этой ссылке
            
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);

            
    // Таймаут, если сервис не отвечает больше 30 секунд, выходим
            
    curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,30);

            
    // Активируем GZIP сжатие трафика
            
    curl_setopt($curl,CURLOPT_ENCODING,'gzip,deflate');

            
    // Соврем Бобру, напишем в юзер-агент неправду
            
    curl_setopt($curl,CURLOPT_USERAGENT$user_agent);

            
    // Если все ок, в $html вернется html код главной страницы
            
    if( $html curl_exec($curl) ){

                
    // Указываем куда отправлять запрос
                
    curl_setopt($curl,CURLOPT_URL,'http://forums.kuban.ru/forum/login_new.php');

                
    // Указываем подключению, что слать нужно не GET (по умолчанию), а POST запросы
                
    curl_setopt($curl,CURLOPT_POST,TRUE);

                
    // Указываем, что именно отправлять в POST данных, на этой стадии происходит ввод логина/пароля
                
    curl_setopt($curl,CURLOPT_POSTFIELDS,"username=$login&password=$pass&kodun=663b0d40370c0619c99842a23e4ff620");

                
    // Если все ок, в $html вернется html код главной страницы
                
    if( $html curl_exec($curl) ){

                    
                        
    // Указываем куда отправлять запрос
                        
    curl_setopt($curl,CURLOPT_URL,'http://forums.kuban.ru/forum/posting_new.php?page=1');

                        
    // Указываем, что именно отправлять в POST данных, на этой стадии происходит ввод логина/пароля
                        
    curl_setopt($curl,CURLOPT_POSTFIELDS,"add_post=$id&message=$content");

                        if( 
    $html curl_exec($curl) ){

                            echo 
    'Постинг выполнен!';
                        
                    }
                }
            }                                    

            
    // Закрываем подключение, очищаем память
            
    curl_close($curl);
        }

    ?>

    Добавлено через 42 минуты
    Что не так сделал ?
     
  6. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    0) тег (PHP) ччч (/PHP) значительно повысит читабельность
    1) последовательность действий неверная ( вначале нужно залогинится на сайт, а потом все остальное
    А здесь же сперва берется содержимое какой-то страницы а потом идет попытка логина.
    2)
    PHP:
    curl_setopt($curl,CURLOPT_POSTFIELDS,"add_post=$id &message=up");  
    здесь в строке с данными есть лишний пробел, как впрочем и в вырхнем посте.
    ну и данные здесь лучше передавать не строкой а массивом напрямую, или если тсрокой то как результат работы ф-циии http_build_query
    PHP:
    curl_setopt($curl,CURLOPT_POSTFIELDS,"add_post=$id &message=up");  // не так 
    $data = array( "add_post" => $id"message"=>"up" );
    curl_setopt($curl,CURLOPT_POSTFIELDS,$data); // а так 
    curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query($data)); // или так 
    3) $pass&kodun=663b0d40370c0619c99842a23 e4ff620" - теоретически это хеш-значения должно генерироваться для каждой страницы свое, а здесь же используется какое-то константное
    PHP:
    curl_setopt($curl,CURLOPT_POSTFIELDS,"username=$lo gin&password=$pass&kodun=663b0d40370c0619c99842a23 e4ff620");
    4)
    PHP:
    if( preg_match('/\<input type=\"hidden\" name=\"killspammers\" value=\"(.+?)\"\/\>/'$html$out) ){
    - здесь выдирается скрытое значение "killspammers" но оно не используется в коде.
    --------------------
    ЗЫ. если есть переменная killspammers то возможно на сайте присутствует какая-то "защита" от спама, на ДжаваСкрипте или еще что-то ... хотя по внешнему виду сайта это очень сомнительно
     
    Muntik нравится это.
  7. Muntik

    Muntik

    Регистр.:
    3 июн 2008
    Сообщения:
    457
    Симпатии:
    88
    Форма логина (форма логина такая только на страницах тем, на главной же присваевается проверочное значение "kodun"

    PHP:
    <form action="login_new.php" method="post">
        <
    font color="#000099">Имя:</font>
        <
    input type="text" name="username" size="10" maxlength="30"/>
        <
    font color="#000099">Пароль:</font>
        <
    input type="password" name="password" size="10" maxlength="30"/>

        <
    input type="submit" value="войти">
        </
    form>
    POST :
    PHP:
    POST /forum/login_new.php HTTP/1.1
    User
    -AgentOpera/9.80 (Windows NT 5.1UruPresto/2.7.62 Version/11.00
    Host
    forums.kuban.ru
    Accept
    text/htmlapplication/xml;q=0.9application/xhtml+xmlimage/pngimage/jpegimage/gifimage/x-xbitmap, */*;q=0.1
    Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
    Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
    Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
    Referer: http://forums.kuban.ru/forum/viewtopic_new.php?t=3617170&all=all&sort=9
    Cookie: PHPSESSID=70khhtteb5j26ip682607f9ids15s1lt
    Cookie2: $Version=1
    Connection: Keep-Alive, TE
    TE: deflate, gzip, chunked, identity, trailers
    Content-Length: 31
    Content-Type: application/x-www-form-urlencoded

    username=---&password=---
    Как правильно будет выглядеть форма авторизации и как узнать авторизовался он или нет ?
     
  8. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    ПОСТ запрос

    Код:
    username=aaaaa&password=bbbbb
    
    узнать - обучно по тексту на странице, который отличается для залогиненого и незалогиненого юзера - имя пользователя, форма логина и т.п.
     
  9. Muntik

    Muntik

    Регистр.:
    3 июн 2008
    Сообщения:
    457
    Симпатии:
    88
    [​IMG]

    Получилось залогиниться подскажите как это реализовать в коде
     

    Вложения:

    • post.JPG
      post.JPG
      Размер файла:
      41,6 КБ
      Просмотров:
      23
  10. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    я же написал - найди в тексте страницы строку и проверяй ее наличие в том что возвращает курл
    PHP:
    //....
    $html curl_exec($curl)
    if 
    substr_count($html,'подстрока для проверки')
    {
     echo 
    ' логин выполнен';

    }