Как войти с помощью PHP (и Curl) в DirectAdmin - PullRequest
0 голосов
/ 16 февраля 2011

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

Я пробовал много скриптов, но, похоже, не могу заставить его работать ...

Текущий скрипт:

$url = 'http://213.247.000.000:2222/CMD_SHOW_LOG?domain=mydomain.com&type=log';
$username = 'xxx';
$password = 'xxx';
    $fields = array(
        'username'=>urlencode($username),
        'password'=>urlencode($password)
        );
    $fields_string='';
    foreach($fields as $key=>$value) { 
        $fields_string .= $key.'='.$value.'&'; 
    }
    rtrim($fields_string,'&');
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST,count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    $result = curl_exec($ch);
    if($result===false) {
        echo 'CURL ERROR: '.curl_error($ch);
    }
    curl_close($ch);

    var_dump($result);

Ответы [ 4 ]

5 голосов
/ 23 февраля 2011

Я понял!

Сделал из него небольшую функцию:

function getlog($ip,$username,$password,$domain) {
    $url = 'http://'.$ip.':2222';

    // set temp cookie
    $ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

    // make list of POST fields
    $fields = array(
        'referer' =>urlencode('/'),
        'username'=>urlencode($username),
        'password'=>urlencode($password)
        );
    $fields_string='';
    foreach($fields as $key=>$value) { 
        $fields_string .= $key.'='.$value.'&'; 
    }
    rtrim($fields_string,'&');
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_COOKIEJAR, $ckfile);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_URL,$url.'/CMD_LOGIN');
    curl_setopt($ch,CURLOPT_POST,count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    $result = curl_exec($ch);
    if($result===false) {
        die('CURL ERROR: '.curl_error($ch));
    } else {
        curl_setopt($ch,CURLOPT_URL,$url.'/CMD_SHOW_LOG?domain='.$domain.'&type=log');
        curl_setopt($ch,CURLOPT_COOKIEFILE, $ckfile);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);
        curl_close($ch);
        if($result===false) {
            die('CURL ERROR: '.curl_error($ch));
        } else {
            return $result;
        }
    }
}
2 голосов
/ 23 апреля 2011

Возможно, вам лучше использовать класс DirectAdmin PHP API .

1 голос
/ 16 февраля 2011

Вам не нужно url-кодировать свое имя пользователя / пароль.Просто передайте обычный массив в CURL, и он позаботится о кодировке.

curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
1 голос
/ 16 февраля 2011

Вам необходимо использовать fiddler и firebug , чтобы выяснить, что отправляется при входе в систему через браузер.

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

Возможно, вам потребуется установить ссылку, пользовательский агент или файлы cookie.Вы также просматриваете запрос, чтобы указать, что вам нужно отправить.

Веб-разработчик - полезный инструмент для отключения файлов cookie и JavaScript.Посмотрите, можете ли вы войти без файлов cookie или JavaScript.

Использование firebug позволит вам узнать, есть ли какие-либо ajax-запросы, происходящие за кулисами.

Слепая публикация с использованием curl приведет вас в бешенство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...