Курл и яваскрипт - как пройти авторизацию? ПХП5

Тема в разделе "PHP", создана пользователем Alexanderod, 20 ноя 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Alexanderod

    Alexanderod Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    49
    Симпатии:
    11
    Пытаюсь авторизироваться курлом на сайте.
    PHP:
    function get_page1($url,$headers,$post)
        {
                
    $process curl_init($url);
        
    $fp1 fopen("result2.txt""w"); 
        
    $fp2 fopen("header2.txt""w"); 
        
    $fp3 fopen("errors2.txt""w"); 
            
    curl_setopt($processCURLOPT_REFERER'http://site.ua/'); // Задает значение HTTP заголовка "Referer: ".
        
    curl_setopt($processCURLOPT_VERBOSE1); // При установке этого параметра в ненулевое значение cURL будет выводить подробные сообщения о всех производимых действиях.
        
    curl_setopt($processCURLOPT_RETURNTRANSFER1); //При установке этого параметра в ненулевое значение CURL будет возвращать результат, а не выводить его.
        
    curl_setopt($processCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 (.NET CLR 3.5.30729)');
        
    curl_setopt($processCURLOPT_COOKIEFILE'cookie1.txt');
        
    curl_setopt($processCURLOPT_COOKIEJAR'cookie1.txt');
        
    curl_setopt($processCURLOPT_POST1); // При установке этого параметра в ненулевое значение будет отправлен HTTP запрос методом POST типа application/x-www-form-urlencoded, используемый браузерами при отправке форм.
        
    curl_setopt($processCURLOPT_POSTFIELDSjoin('&'$post)); //Строка, содержащая данные для HTTP POST запроса.
        
    curl_setopt($processCURLOPT_HEADER1);// При установке этого параметра в ненулевое значение результат будет включать полученные заголовки.
        
    curl_setopt($processCURLOPT_FOLLOWLOCATION0); //ри установке этого параметра в ненулевое значение, при получении HTTP заголовка "Location: " будет происходить перенаправление на указанный этим заголовком URL (это действие выполняется рекурсивно, для каждого полученного заголовка "Location:").
        
    curl_setopt($processCURLOPT_NOBODY0);//При установке этого параметра в ненулевое значение результат не будет включать документ (например, вам нужно получить только заголовки
        
    curl_setopt($processCURLOPT_HTTPHEADER$headers);//CURLOPT_HTTPHEADER: Массив с HTTP заголовками.
        
    curl_setopt($processCURLOPT_WRITEHEADER$fp2); //Файл, в который будут выведены полученные заголовки.
        
    curl_setopt($processCURLOPT_STDERR$fp3); //Файл, в который будут выводиться сообщения об ошибках. По умолчанию STDERR.
            
    $return curl_exec($process);
            
    curl_close($process);
            return 
    $return;
        }
    Постом отправляю все переменные(считываю хттпхедером), отправляю все заголовки в хедерсах, реферры, куки, а авторизация не происходит и хоть ты тресни.
    Дело возможно в том, что сайт использует скрипты вида:
    PHP:
     <script type="text/javascript"
     function 
    auth(){document.getElementById('auth').innerHTML=' ';} 
     
    </script><head>
     <base href="http://adress" />
      <!--[if lte IE 6]>
     <script type="text/javascript" src="supersleight.js"></script>
     <![endif]--> 
    function doLoad(p,prod) {
        prod=(prod!= undefined)?prod:1;
        //alert(p+' '+prod);
        req=false;
        try { // определить метод поддержки
            req=new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e) {
            try {
                req=new ActiveXObject('Microsoft.XMLHTTP'); // сработает в Internet Explorer
            } catch (e) {
                if(window.XMLHttpRequest){ // сработает в Mozilla и Safari
                   req=new XMLHttpRequest();
                }
            }
        }
        if (req){// если какой-то из вариантов поддерживается
         var params = 'prod=';
        if(prod==1){  params = 'prod='+p;pglob2=1}
            else { params = 'pag='+p;}
            pglob=p;
           req.onreadystatechange = readystate; // назначим обработчик событию объекта
           req.open("POST", 'ajax-pags.php', true); // задать параметры методу open
           req.setRequestHeader("Accept-Language", "ru, en");
           req.setRequestHeader("Accept-Charset", "windows-1251;q=1");
           req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
           req.setRequestHeader("Content-length", params.length);
           req.setRequestHeader("Connection", "close");
           req.send(params); // отправить запрос
        }
    }
    function readystate() {
        if (req.readyState != 4) {document.getElementById('loading').innerHTML ='<img src="img/loading.gif"  />';}
        if (req.readyState == 4){// если запрос завершен
            if (req.status == 200) { // если он завершен без ошибок
                document.getElementById('maintext').innerHTML =''+req.responseText+'';
                document.getElementById('loading').innerHTML =' ';
                 active_menu();
                if(pglob2==1){color(pglob); }
                //alert(pglob);
            } else {
                alert("Произошла ошибка "+ req.status+":\n" + req.statusText);
            }
        }
    }
    fin_inf=0;
    function pag_load(t) {
        if(t=='fin')fin_inf=1;
        //alert(p+' '+prod);
        req1=false;
        try { // определить метод поддержки
            req1=new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e) {
            try {
                req1=new ActiveXObject('Microsoft.XMLHTTP'); // сработает в Internet Explorer
            } catch (e) {
                if(window.XMLHttpRequest){ // сработает в Mozilla и Safari
                   req1=new XMLHttpRequest();
                }
            }
        }
        if (req1){// если какой-то из вариантов поддерживается
                params = 'pag=';
           req1.onreadystatechange = readystate1; // назначим обработчик событию объекта
           req1.open("POST", t+'.php', true); // задать параметры методу open
           req1.setRequestHeader("Accept-Language", "ru, en");
           req1.setRequestHeader("Accept-Charset", "windows-1251;q=1");
           req1.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
           req1.setRequestHeader("Content-length", params.length);
           req1.setRequestHeader("Connection", "close");
           req1.send(params); // отправить запрос
        }
    }
    function readystate1() {
        if (req1.readyState != 4) {document.getElementById('loading').innerHTML ='<img src="img/loading.gif"  />';}
        if (req1.readyState == 4){// если запрос завершен
            if (req1.status == 200) { // если он завершен без ошибок
                document.getElementById('maintext').innerHTML =''+req1.responseText+'';
                document.getElementById('loading').innerHTML =' ';
                 active_menu();
                if(fin_inf==1){
                 document.getElementById('dolg1').innerHTML=document.getElementById('dolg2').innerHTML;
                 document.getElementById('prosr1').innerHTML=document.getElementById('prosr2').innerHTML;
                fin_inf=0;
                        }
                //alert(pglob);
            } else {
                alert("Произошла ошибка "+ req1.status+":\n" + req1.statusText);
            }
        }
    }
    Я я так понимаю они меня и выбрасывают.
    В ответ от сервера я получаю:
    < HTTP/1.1 200 OK
    < Date: Sat, 20 Nov 2010 02:43:05 GMT
    < Server: Apache/2.0.63 (Win32) PHP/5.2.10
    < X-Powered-By: PHP/5.2.10
    < Expires: Thu, 19 Nov 1981 08:52:00 GMT
    < Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    < Pragma: no-cache
    < Transfer-Encoding: chunked
    < Content-Type: text/html; charset=windows-1251
    <
    * Connection #0 to host ***** left intact
    * Closing connection #0
    Как авторизироваться, есть идеи?
     
  2. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    В CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR нужно указывать абсолютный путь к файлу.
    Если это не поможет, попробуй другим сниффером все заголовки отловить, возможно твой не всё показывает. Например, этим.
     
  3. Alexanderod

    Alexanderod Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    49
    Симпатии:
    11
    Спасибо за ссылку. Приятная программа.
    Отловил заголовки - ничего нового не добавилось.
    Все данные передаю верно.
    Куки получает верно, передает тоже верно - проверил:)
    Мне кажется проблема в том что аякс не может начать выдачу или определить что поддерживает курл и поэтому вываливает меня на главную обратно.
    Кто встречал аякс-авторизацию?
     
  4. Fak1r

    Fak1r Постоялец

    Регистр.:
    8 янв 2008
    Сообщения:
    88
    Симпатии:
    18
    Адресс сайта на котором пробуешь авторизоваться напиши или это большой секрет?
     
  5. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    видимо секрет и я на 99% уверен ошибка в том, что не на ту страницу шлет данные с авторизацией :D
     
  6. Alexanderod

    Alexanderod Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    49
    Симпатии:
    11
    Адресс сайта не секрет, но уже не актуально - разобрался.
    Проблема оказалась в том, что нужно было отправлять XML-запрос курлом с нужными мне данными в посте.Я же отправлял обычный запрос.
    PHP:
    curl_setopt($chCURLOPT_HTTPHEADER, array('Connection: close'));
    :)
     
Статус темы:
Закрыта.