Автоматический вход в RoundCube используя CURL.

Тема в разделе "Как сделать...", создана пользователем Maza, 22 июл 2012.

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

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Пытался написать скрипт, для автоматического входа в RoundCube с помощью CURL, но авторизация не проходит, полагаю, что RoundCube выдаёт ключ сессии в виде _token, но спарсить страницу file_get_contents не получается вываливается ошибка
    хотя права даны 777.
    Ещё видел на просторах интернета такой скрипт, но он тоже не работает.
    http://blog.philippheckel.com/2008/05/16/roundcube-login-via-php-script/


    PHP:
    <?php
    $url 
    'http://xxx/';
    $login 'login';
    $pass 'pass';
     
    function 
    post_content($url$postdata) {
        
    $uagent 'Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2';
     
        
    $ch curl_init($url);
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_HEADER1);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_ENCODING"");
        
    curl_setopt($chCURLOPT_USERAGENT$uagent);  // useragent
        
    curl_setopt($chCURLOPT_TIMEOUT120);
        
    curl_setopt($chCURLOPT_POST1);
        
    curl_setopt($chCURLOPT_POSTFIELDS$postdata);
        
    curl_setopt($chCURLOPT_COOKIEJARdirname(__FILE__).'cookie.txt');
        
    curl_setopt($chCURLOPT_COOKIEFILEdirname(__FILE__).'cookie.txt');
     
        
    $content curl_exec($ch);
        
    $err curl_errno($ch);
        
    $errmsg curl_error($ch);
        
    $header curl_getinfo($ch);
        
    curl_close($ch);
     
        
    $header['errno'] = $err;
        
    $header['errmsg'] = $errmsg;
        
    $header['content'] = $content;
        return 
    $header;
    }
     
    // формируем строку с данными
    $postdata '_user='.$login.'&_pass='.$pass.'&_action=login';
     
    //Отправляем запрос
    $result post_content($url$postdata);
     
    echo 
    '<br>',$result;
     
    ?>
     
  2. evangel

    evangel Создатель

    Регистр.:
    7 сен 2008
    Сообщения:
    17
    Симпатии:
    1
    может на вашем веб хостинге в настройках apache или nginx стоит фильтр для CURL
     
  3. Maza

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Нет не стоит. Всё с задачей справился. Спасибо. Вот исходник для авторизации.

    PHP:
    function post_content($url$postdata) {
     
        
    $uagent 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';
     
        
    $ch curl_init($url);
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_HEADER0);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
        
    curl_setopt($chCURLOPT_ENCODING"");
        
    curl_setopt($chCURLOPT_USERAGENT$uagent);
        
    curl_setopt($chCURLOPT_TIMEOUT120);
        
    curl_setopt($chCURLOPT_POST1);
        
    curl_setopt($chCURLOPT_POSTFIELDS$postdata);
        
    curl_setopt($chCURLOPT_COOKIEJARdirname(__FILE__).'/tmp/cookie.txt');
        
    curl_setopt($chCURLOPT_COOKIEFILEdirname(__FILE__).'/tmp/cookie.txt');
     
        
    $content curl_exec($ch);
     
        if (
    preg_match('/<input.+name="_token".+value="([^"]+)"/mi'$content$m))
            
    $token $m[1];
     
        
    curl_setopt($chCURLOPT_POSTFIELDS$postdata.'&_token='.$token);
        
    $content curl_exec($ch);
     
        
    $err curl_errno($ch);
        
    $errmsg curl_error($ch);
     
        
    $header curl_getinfo($ch);
        
    curl_close($ch);
     
        if (
    $content) {
            
    $header['errno'] = $err;
            
    $header['errmsg'] = $errmsg;
            
    $header['content'] = $content;
        }
      else
            
    $header['content'] = "ERROR!";
        return 
    $header;
    }
     
Статус темы:
Закрыта.