СURL+AJAX+Авторизация

Discussion in 'PHP' started by init0, 15 Aug 2011.

  1. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Не могу аторизуватися на сайте clubtone.net, окно авторизации вызывается js.
    Адрес форми авторизации выглядит так:
    http://clubtone.net/index/40?_tp_=xml&_wi=4

    Оснифив что данные отправляются на:
    http://clubtone.net/index/sub/

    но не авторизует, я з курл работаю первий раз, так что возможно есть неточности, подскажите пожалуйста что не так, или куда копать.

    Вот код:
    PHP:
        $user = 'user';
        
    $pass = 'pass';

        
    // Страница реестрции
        
    $login_page = 'http://clubtone.net/index/sub/';

        
    // POST запрос
        
    $post = 'user='.$user.'&password='.$pass.'&rem=1&a=2&ajax=2&_tp_=xml';

        function 
    post_content($url, $postdata) {

          
    $ch = curl_init();
          
    curl_setopt($ch, CURLOPT_URL, $url);
          
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          
    curl_setopt($ch, CURLOPT_HEADER, 0);
          
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
          
    curl_setopt($ch, CURLOPT_ENCODING, "");
          
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
          
    curl_setopt($ch, CURLOPT_TIMEOUT, 120);
          
    curl_setopt($ch, CURLOPT_POST, 1);
          
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
          
    curl_setopt($ch, CURLOPT_REFERER, 'http://clubtone.net/index/40?_tp_=xml&_wi=4');
          
    curl_setopt($ch, CURLOPT_COOKIEJAR, "/var/www/music/cookie.txt");
          
    curl_setopt($ch, CURLOPT_COOKIEFILE,"/var/www/music/cookie.txt");

          return 
    curl_exec( $ch );
          
    curl_close( $ch );
    }

    $res = post_content ($login_page, $post);
    //echo $res;
    ~Код обработчика на сайте:
    Code:
    sendFrm555=function(){
    $('#msgL555').html('<div class="myWinLoadS"></div>');
    _uPostForm('frmLg555',{type:'POST',url:'/index/sub/',error:function(){
    _uButtonEn('frmLg555',1);
    $('#msgL555').html('<div class="myWinLoadSF" title="Невозможно выполнить запрос, попробуйте позже"></div>');
    _uWnd.alert('<div class="myWinError">Невозможно выполнить запрос, попробуйте позже</div>','',{w:250,h:90,tm:3000,pad:'15px'});
    }
    });
    }
    
     
    #1 init0, 15 Aug 2011
    Last edited: 15 Aug 2011
  2. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    Попробуй с кукисы выдрать из хедера!
    curl_setopt($ch, CURLOPT_HEADER, 1);
    На реферера можешь наложить он и так работает.
    Я бы сделал что-то типа
    PHP:
          curl_setopt($ch, CURLOPT_POST, 1); 
          
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); 
          
    curl_setopt($ch, CURLOPT_URL, $url); 
          
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
          
    curl_setopt($ch, CURLOPT_HEADER, 1);
          .......
         
    $content =  curl_exec( $ch );
         
    ну и дальше pregmatch
     
     
    #2 ZnikiR, 15 Aug 2011
    Last edited: 15 Aug 2011
  3. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    ZnikiR спасибо, сейчас попробую.
     
  4. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Шото нихрина у меня не получається:(

    Вот куки:
    Code:
                
    [0] =>  8clubtoneuCoz=; path=/; expires=Sat, 15-Aug-2009 06:39:33 GMT; domain=.clubtone.net;             
    [1] =>  8clubtoneuzll=1313390373; path=/; expires=Tue, 14-Aug-2012 06:39:33 GMT; domain=.clubtone.net;            
     [2] =>  ucvid=ezzPO1Vra7; domain=clubtone.net; path=/; expires=Tue, 14-Aug-2012 06:39:33 GMT
    Формат правильний??

    Сам код:
    PHP:
    <?php

        $user 
    = 'user';
        
    $pass = 'pass';

        
    // Страница реестрции
        
    $login_page = 'http://clubtone.net/index/40?_tp_=xml&_wi=4';
        
    $page = 'http://clubtone.net/';

        
    // POST запрос
        
    $post = 'user='.$user.'&password='.$pass.'&rem=1&a=2&ajax=2&_tp_=xml';

        function 
    get_cookie($url)
        {
            
    $curl = curl_init($url);
            
    curl_setopt($curl, CURLOPT_HEADER, 1);
            
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            
    curl_setopt($curl, CURLOPT_REFERER, 'http://clubtone.net/');
            
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
            
    $data = curl_exec($curl);

            
    // Добиваем куки
            
    $header = substr($data, 0, curl_getinfo($curl, CURLINFO_HEADER_SIZE));

            
    preg_match_all('#Set-Cookie:(.*);*\s*#i', $header, $cookie);

            
    $str_cookie = '';
            foreach(
    $cookie[1] as $value) { $str_cookie .= $value; }

            return 
    $str_cookie;
            
            
    curl_close($curl);
        }


        function 
    post_content($url, $postdata, $cookie=null)
        {
          
    $curl = curl_init($url);
          
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
          
    curl_setopt($curl, CURLOPT_HEADER, 0);
          
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
          
    curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
          
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
          
    curl_setopt($curl, CURLOPT_REFERER, 'http://clubtone.net/');
          
    curl_setopt($curl, CURLOPT_TIMEOUT, 120);
          
    curl_setopt($curl, CURLOPT_POST, 1);
          
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
          
    curl_setopt($curl, CURLOPT_COOKIE, $cookie);
          
    //curl_setopt($curl, CURLOPT_COOKIEFILE,"/var/www/music/coo.txt");
          //curl_setopt($curl, CURLOPT_COOKIEJAR, "/var/www/music/coo.txt");

          
    return curl_exec($curl);
          
    curl_close($curl);
        }

    $res = post_content($login_page, $post, get_cookie('http://clubtone.net'));

    echo 
    '<pre>';
    print_r($res);
    echo 
    '</pre>';

    ?>
    етот код видает:
    400 Bad Request

    если закрментировать строчку с куками:
    //curl_setopt($curl, CURLOPT_COOKIE, $cookie);

    То загружает страницу без ошибки.


    curl_setopt($curl, CURLOPT_COOKIEFILE,"/var/www/music/coo.txt");
    curl_setopt($curl, CURLOPT_COOKIEJAR, "/var/www/music/coo.txt");
    Не работает для первого запроса??

    Чуствую що подход реализации не правильни, я как в туманє, даже толком не ясно куда слать денние.

    Извиняюсь за свой ​​русский, постарайтесь не обращать на ошибки внимание :)
     
  5. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    держи , студент :)

    PHP:

    <?php 
    set_time_limit
    (0);  
    function 
    curl($url,$post)  
    {  
     
    $cfile =  $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'; 
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 WebMoney Advisor");  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_HEADER, 0);  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
     
    curl_setopt($ch, CURLOPT_REFERER, 'http://clubtone.net/index/1'); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cfile);  
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cfile);  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  
    curl_setopt($ch, CURLOPT_POST, 1);  
    $result = curl_exec($ch);  

     
    return 
    $result;  
    }

    $login ='';//сюда свой логин пихай
    $pass ='';// ну а здесь- незабудь пароль всобачить


    $result = curl("http://clubtone.net/index/1",'user='.$login.'&password='.$pass.'&rem=1&a=2&ajax=1&rnd=673&_tp_=xml'); 

    //echo $result;
    $result = iconv( "UTF-8", "windows-1251",$result);


    echo 
    $result;

    ?>

     
    #5 Kusto, 15 Aug 2011
    Last edited: 16 Aug 2011
    1 person likes this.
  6. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Kusto спасибо, толька пачимута не работает.

    Пробую дальше авторизироватца, пока безрезультатно:(
     
  7. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    у меня работает :)
    P.S. Надеюсь ты заполнил строчки $login и $pass ????
    Авторизацию скрипт проходит, без проверки я бы его сюда не выложил :)
     
  8. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    :) Канешна ввожу, но авторизации нет, просто перебрасивает на страницу.

    Когда пользиватель авторизирован то пункти меню - "регистрация", "вход" должни изчезнуть.

    Исчо що странно когда я просматриваю заголовки через firebug, httpfox, которие шльот скрипт к сайту нету POST-запроса, ета нормально??

    Пробивал исчо так:
    PHP:
    function curl_c00ki($url='http://clubtone.net/')
    {

    $cfile =  $_SERVER['DOCUMENT_ROOT'].'/cookies.txt';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 WebMoney Advisor");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
     
    curl_setopt($ch, CURLOPT_REFERER, 'http://clubtone.net/');
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cfile);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($ch);
    }
    curl_c00ki();

    function 
    curl($url,$post)
    {

    $cfile =  $_SERVER['DOCUMENT_ROOT'].'/cookies.txt';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 WebMoney Advisor");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
     
    curl_setopt($ch, CURLOPT_REFERER, 'http://clubtone.net/index/1');
     
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cfile);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cfile);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_POST, 1);
    $result = curl_exec($ch);


    return 
    $result;
    }

    $login ='';
    $pass ='';

    $result = curl("http://clubtone.net/index/1", 'user='.$login.'&password='.$pass.'&rem=1&a=2&ajax=1&rnd=673&_tp_=xml');

    echo 
    $result;
    Достать первой функцией(curl_c00ki) cookie и передать в вторую функцию(через файл) там уже прочитать и после авторизации записать новие, но тоже не помогло.
     
    #8 init0, 15 Aug 2011
    Last edited: 15 Aug 2011
  9. skrutcher

    skrutcher New Member

    Joined:
    17 Jul 2011
    Messages:
    17
    Likes Received:
    1
    Reputations:
    0
    Я все норм вижу.
    убери rnd=673. Его при запросе что то не видел.
     
  10. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Ет странно, и авторизация тож есть??

    Нет смотрил передайотца, скритое поле в форме.
     
  11. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    проверьте кто нибудь мой скрипт, у кого денвер под рукой , логин a1111122222 пароль 2222222222 , мож я идиот :) , и отпишите плиз результат

    у меня все нормально работает в самом верху пишет "Привет, a1111122222 Группа "Пользователи""

    у тебя косяк не со скриптом а с денвером, либо хостингом, либо невалидный логин и пасс
    P.s. права файлу выставил? создается ли у тебя текстовик с куками? Где проверяеш скрипт на денвере или хостинге, если на хосте то на каком, поддерживает ли он курл, если неа денвере то подготовил ли ты денвер для работы с curl, какие ошибки пишет при попытке запуска скрипта? вобщем вариантов куча- единственное что могу сказать- косяк не в скрипте

    P.S.S убери свою функцию куки- это лишнее- используй мой скрипт- как он есть (куки там принимаются и отдаются- скрипт создает текстовик с куками)
     
    #11 Kusto, 15 Aug 2011
    Last edited: 15 Aug 2011
  12. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Дествительно гуд, у меня линукс и авторизиции нет.
    curl - стоит
    текстовик з куками создает
    права тож гуд

    Щас на хостинг заллю, попробую
     
  13. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    >>>P.S.S убери свою функцию куки- это лишнее- используй мой скрипт- как он есть (куки там принимаются и отдаются- скрипт создает текстовик с куками)

    Так и делаю, пробую именно Ваш скрипт, авторизации нет:(
     
  14. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    возьми пожалуйста любой скрипт из рубрики "полезные скрипты" который содержит CURL авторизацию, загрузи себе на денвер или хостинг, и проверь- работает ли он у тебя? Фришные хостинги в основной своей массе CURL не поддерживают, и еще- какие ошибки у тебя пишет?

    P.s. сегодня наверное уже все- завтра будем разбираться что за шайтан поселился у тебя в компе :D
     
  15. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    разобрался я с твоей проблеммой- форум в строчку выполнения curl всобачил лишний пробел, вроде его убрал- скопировал себе на дедик- вроде работает (копируй как есть скрипт и проверяй)
     
  16. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Извеняюсь що долго не отписувал, целей день на стройка вкаливал:(.
    Как ни странно не работает, проверел ищо друг у нево тоже линукс и тоже нет авторезации.
    CURL у себя переуставил, результату не дало.

    Пробувал ищо вчера скрипт на двох безплатних хостингах, не авторизировало, правда результат невзя считать актуальним, поскольку там запрещино CURLOPT_FOLLOWLOCATION.

    Ну и исчо раз спасибо Kusto и остальним учасникам теми за помощь.
     
  17. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    937
    Likes Received:
    355
    Reputations:
    58
    Скорее всего не по делу, так как ТСу, наверно, принципиально сделать это через curl, но я больше люблю сокеты:
    PHP:
    <?php
    $login 
    = "";
    $password = "";

    $fp = fsockopen('clubtone.net', 80, $errno, $errstr);
        if (!
    $fp)
        {
            echo 
    "$errstr ($errno)<br>\n";
        }
        else
        {
            
    $postdata = "user=".$login."&password=".$password."&rem=1&a=2&ajax=1&rnd=673&_tp_=xml";
        
            
    $out = "POST /index/sub/ HTTP/1.1\r\n";
            
    $out .= "Host: clubtone.net\r\n";
            
    $out .= "Content-Length: ".strlen($postdata)."\r\n";
            
    $out .= "Referer: http://clubtone.net/index/1\r\n";
            
    $out .= "Cache-Control: max-age=0\r\n";
            
    $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
            
    $out .= "Accept: application/xml, text/xml, */*; q=0.01\r\n";
            
    $out .= "User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n";
            
    $out .= "Accept-Encoding: gzip, deflate\r\n";
            
    $out .= "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4\r\n";
            
    $out .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3\r\n";
            
    $out .= "X-Requested-With: XMLHttpRequest\r\n";
            
    $out .= "Content-Transfer-Encoding: binary\r\n";
            
    $out .= "Cookie: income=1\r\n";
            
    $out .= "Connection: close\r\n\r\n";
      
            
    $out .= $postdata;
      
            
    fwrite($fp, $out);
            
    $page = '';
            while (!
    feof($fp))
            {
                
    $page .= fgets($fp, 128);
            }
            
    fclose($fp);
            
    preg_match_all("#(Set-Cookie: )(.*?;)#", $page, $cookie);
            
    $cookie = implode(" ", $cookie[2]);
        }
    $fp = fsockopen('clubtone.net', 80, $errno, $errstr);
        if (!
    $fp)
        {
            echo 
    "$errstr ($errno)<br>\n";
        }
        else
        {
            
    $out = "GET / HTTP/1.1\r\n";
            
    $out .= "Host: clubtone.net\r\n";
            
    $out .= "User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n";
            
    $out .= "Cookie: ".$cookie."\r\n";
            
    $out .= "Connection: close\r\n\r\n";
        
            
    fwrite($fp, $out);
            
    $get = "";
            while (!
    feof($fp))
            {
                
    $get .= fgets($fp);
            }
            
    fclose($fp);
            echo 
    $get;
        }
    ?>
     
    #17 Skofield, 17 Aug 2011
    Last edited: 17 Aug 2011
  18. init0

    init0 New Member

    Joined:
    21 Oct 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Skofield, обошол проблему с флангу :cool: , авторезация пройдена. Спасибо:)

    Если розберусь що там за проблема била з CURL то обизательно отпишусь.
     
    #18 init0, 17 Aug 2011
    Last edited: 17 Aug 2011
  19. RexTiam

    RexTiam Member

    Joined:
    2 Nov 2009
    Messages:
    113
    Likes Received:
    45
    Reputations:
    5
    init0, у тебя какая версия денвера 5,2 или 5,3 ?
     
  20. DVMade

    DVMade Banned

    Joined:
    23 Jul 2010
    Messages:
    110
    Likes Received:
    3
    Reputations:
    0
    uCoz жжет))