Curl и AJAX

Тема в разделе "Как сделать...", создана пользователем lolshik, 12 мар 2010.

Статус темы:
Закрыта.
  1. lolshik

    lolshik

    Регистр.:
    21 фев 2008
    Сообщения:
    316
    Симпатии:
    127
    Добрый день. Помогите разобраться.
    Есть скрипт act.php
    Есть обёртка для CURL (hxxp://www.samborsky.com/php/1010/)
    act.php выглядит так:
    PHP:
    // Подключаем файл с классом
    include('class/s_http.php');
    // Создали класс
    $http = new s_http();
    // Инициализируем
    $http->init();
    if (isset(
    $_GET['login'])) {
        
    $http->get('http://site.ru/')
        
    sleep(2);
    $http->post('http://site.ru/authorisation.php','login=name@gmail.ru&password=12345');
        
    sleep(2);
    }
    if (isset(
    $_GET['get_mail'])) {
        
    $http->get('http://site.ru/mail.php')
        
    sleep(2);
    }    
    К скрипту я обращаюсь через AJAX. Т.е. сначало c act.php?login=true
    затем act.php?mail=true
    Проблема в том, что при втором обращении к срипту (act.php?get_mail=true) сайт забывает что я уже авторизирован.
    Я так понимаю из за того, что при каждом обращении к act.php затирается придыдущие куки, так как мы инициализируем класс заново.
    Как этого можно избежать? При условии что не хочется два раза подряд логиниться.
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    Попробуй добавить в класс
    PHP:
            var $cookiesSafe false;
    В функции function init()
    PHP:
         $this->set_opt(CURLOPT_COOKIESESSION,true);
    #заменить на 
         
    if(!$this->cookiesSafe$this->set_opt(CURLOPT_COOKIESESSION,true);
    И если требуется сохранить преведущий кук - дописать уже в скрипте
    PHP:
     $http->cookiesSafe trye;
        
    $http->get('http://site.ru/mail.php'
        
    sleep(2);
     
    lolshik нравится это.
  3. SolutionFix

    SolutionFix 17 лет програмлю ;)

    Регистр.:
    20 ноя 2006
    Сообщения:
    272
    Симпатии:
    318
    В общем разобрались мы в аське, вопрос был (на будущее) в том чтобы доделать исходный класс - поставить опцию CURLOPT_COOKIEJAR

    Вот так теперь выглядит участок класса:э

    PHP:
    // Кукисы
                
    $this->set_opt(CURLOPT_COOKIESESSION,true);
                
    $this->set_opt(CURLOPT_COOKIEFILE,'cookiefile');
                
    $this->set_opt(CURLOPT_COOKIEJAR'cookiefile');
                
                
    // Если Referer не задан, включаем автореферер. Как в браузерах
                
    if( !empty($this->referer) ){
                    
    $this->set_opt(CURLOPT_REFERER,$this->referer);
     
    lolshik нравится это.
  4. lolshik

    lolshik

    Регистр.:
    21 фев 2008
    Сообщения:
    316
    Симпатии:
    127
    Спасибо что помогли разобраться. Возник ещё один вопрос.
    Посылаю post запрос к vkontakte.ru Запрос ниже. Ответ приходит вида:


    PHP:
    {"summary":"В группе 1193 темы. ","pages":"<ul class=\"pageList\"><li class=\"current\">1<\/li><li><a href=\"board.php?act=topics&id=974747&offset=50\" onclick=\"return getPage(50)\">2<\/a><\/li><li><a href=\"board.php?act=topics&id=974747&offset=100\" onclick=\"return getPage(100)\">3<\/a><\/li><li><a href=\"board.php?act=topics&id=974747&offset=1150\" onclick=\"return getPage(1150)\">&raquo;<\/a><\/li><\/ul>","html":"<div class=\"boardTopic clearFix\" style='border-top-width:1px;'>\n<table width=\"565\"><tr><td width=\"370px\">\n  <h3 class=\"topicTitle\"><a href=\"topic-974747_4556783\">Вам как больше нравится:Дима Билан или Витя Белан?<\/a><\/h3>\n  <div class=\"moreInfo clearFix\">\n   <div class=\"fl_l\"><span style=\"color: #333\">172 сообщения.<\/span> \n 
    Весь ответ приходит в одну строку с экраннированными слэшами и добавленными \n и прочими ненужностями. Возможно ли получить инфу в нормальном html?



    PHP:
    http://vkontakte.ru/board.php?act=a_get_topics_page&gid=5277

    POST /board.php?act=a_get_topics_page&gid=5277 HTTP/1.1
    Host
    vkontakte.ru
    User
    -AgentMozilla/5.0 (WindowsUWindows NT 5.1en-USrv:1.9.1.8Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.21022)
    Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Referer: http://vkontakte.ru/board5277
    Content-Length: 17
    Cookie: remixchk=5; remixautobookmark=2; remixclosed_tabs=0; remixclosed_tabs=0; remixnews_privacy_filter=0; remixgroup_closed_tabs=368; remixsid=7105ca276d925a96eeba; audio_vol=1
    Pragma: no-cache
    Cache-Control: no-cache
    offset=50&order=0
    HTTP/1.1 200 OK
    Server: nginx/0.7.59
    Date: Sun, 14 Mar 2010 18:25:52 GMT
    Content-Type: text/html; charset=windows-1251
    Connection: keep-alive
    X-Powered-By: PHP/5.2.0-8+etch13
    Pragma: no-cache
    Cache-Control: no-store
    Content-Encoding: gzip
    Vary: Accept-Encoding
    Content-Length: 744

     
Статус темы:
Закрыта.