С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($chCURLOPT_URL$url);
          
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
          
    curl_setopt($chCURLOPT_HEADER0);
          
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
          
    curl_setopt($chCURLOPT_ENCODING"");
          
    curl_setopt($chCURLOPT_USERAGENT$_SERVER['HTTP_USER_AGENT']);
          
    curl_setopt($chCURLOPT_TIMEOUT120);
          
    curl_setopt($chCURLOPT_POST1);
          
    curl_setopt($chCURLOPT_POSTFIELDS$postdata);
          
    curl_setopt($chCURLOPT_REFERER'http://clubtone.net/index/40?_tp_=xml&_wi=4');
          
    curl_setopt($chCURLOPT_COOKIEJAR"/var/www/music/cookie.txt");
          
    curl_setopt($chCURLOPT_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($chCURLOPT_POST1); 
          
    curl_setopt($chCURLOPT_POSTFIELDS$postdata); 
          
    curl_setopt($chCURLOPT_URL$url); 
          
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
          
    curl_setopt($chCURLOPT_HEADER1);
          .......
         
    $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($curlCURLOPT_HEADER1);
            
    curl_setopt($curlCURLOPT_RETURNTRANSFER1);
            
    curl_setopt($curlCURLOPT_REFERER'http://clubtone.net/');
            
    curl_setopt($curlCURLOPT_USERAGENT$_SERVER['HTTP_USER_AGENT']);
            
    $data curl_exec($curl);

            
    // Добиваем куки
            
    $header substr($data0curl_getinfo($curlCURLINFO_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($curlCURLOPT_RETURNTRANSFER1);
          
    curl_setopt($curlCURLOPT_HEADER0);
          
    curl_setopt($curlCURLOPT_FOLLOWLOCATION1);
          
    curl_setopt($curlCURLOPT_ENCODING'gzip');
          
    curl_setopt($curlCURLOPT_USERAGENT$_SERVER['HTTP_USER_AGENT']);
          
    curl_setopt($curlCURLOPT_REFERER'http://clubtone.net/');
          
    curl_setopt($curlCURLOPT_TIMEOUT120);
          
    curl_setopt($curlCURLOPT_POST1);
          
    curl_setopt($curlCURLOPT_POSTFIELDS$postdata);
          
    curl_setopt($curlCURLOPT_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$postget_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($chCURLOPT_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($chCURLOPT_RETURNTRANSFER1);  
    curl_setopt($chCURLOPT_URL$url);  
    curl_setopt($chCURLOPT_HEADER0);  
    curl_setopt($chCURLOPT_POSTFIELDS$post); 
     
    curl_setopt($chCURLOPT_REFERER'http://clubtone.net/index/1'); 
    curl_setopt($chCURLOPT_COOKIEJAR$cfile);  
    curl_setopt($chCURLOPT_COOKIEFILE$cfile);  
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);  
    curl_setopt($chCURLOPT_POST1);  
    $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($chCURLOPT_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($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_HEADER0);
     
    curl_setopt($chCURLOPT_REFERER'http://clubtone.net/');
    curl_setopt($chCURLOPT_COOKIEJAR$cfile);
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    curl_exec($ch);
    }
    curl_c00ki();

    function 
    curl($url,$post)
    {

    $cfile =  $_SERVER['DOCUMENT_ROOT'].'/cookies.txt';
    $ch curl_init();
    curl_setopt($chCURLOPT_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($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_HEADER0);
    curl_setopt($chCURLOPT_POSTFIELDS$post);
     
    curl_setopt($chCURLOPT_REFERER'http://clubtone.net/index/1');
     
    curl_setopt($chCURLOPT_COOKIEFILE$cfile);
    curl_setopt($chCURLOPT_COOKIEJAR$cfile);
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    curl_setopt($chCURLOPT_POST1);
    $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:
    960
    Likes Received:
    392
    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($fp128);
            }
            
    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:
    117
    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 жжет))