Загрузите главную страницу Moodle с помощью cURL

Привет, у меня возникли проблемы с входом в систему и загрузкой веб-страницы. Что я пытаюсь сделать, так это войти на сайт moodle моей школы и сохранить главную страницу в строке, чтобы я мог использовать парсер для выбора определенной информации и создания приложения gwt.

это то, что у меня есть до сих пор: в moodleLogin.html

<html>
<body>

    <form name="lms" action="moodlephp.php" method="post">
    <input type="text" name="username" id="username" /><br/>
    <input type="password" name="password" id="password" />
    <input type="hidden" name="domain" id="domain" value="students.ltu.edu.au" />
    <input type="submit" name="Login" id="Login" />
    </form>
    <div id="test"></div>
</body>
</html>

в файле moodlephp.php

<?php   

    $username = $_POST["username"];
    $password = $_POST["password"];
    $domain = $_POST["domain"];

    $postfields = array( "username" => $username, "password" => $password, "domain" => $domain );
    $working_folder = "\cookies";

    $cookiefile = tempnam($working_folder, "cookies"); 
    $urlbase = "https://www.latrobe.edu.au/lms";
    $agent = $_SERVER['HTTP_USER_AGENT'];
    $debug = "";
    $debughandle = "";


    // get session cookies to set up the Moodle interaction
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
    curl_setopt($ch, CURLOPT_VERBOSE, $debug);
    if ($debug) curl_setopt($ch, CURLOPT_STDERR, $debughandle);

    curl_setopt($ch, CURLOPT_URL, $urlbase . "/login/index.php"); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $result = curl_exec ($ch);
    curl_close ($ch);


    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
    if(!$cookiefile) echo('empty');
    else echo($cookiefile);
    curl_setopt($ch, CURLOPT_VERBOSE, $debug);
    if ($debug) curl_setopt($ch, CURLOPT_STDERR, $debughandle);

    curl_setopt($ch, CURLOPT_URL, $urlbase . '/login/index.php');
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields)); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $result = curl_exec ($ch);
    curl_close ($ch); 

    if (!$result || !preg_match("/HTTP\/1.1 303 See Other/", $result))
    {
    unlink($cookiefile);
    header("HTTP/1.0 403 Forbidden");
    die("Username/password incorrect.\n");

    }

    // get session key

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
    curl_setopt($ch, CURLOPT_VERBOSE, $debug);
    if ($debug) curl_setopt($ch, CURLOPT_STDERR, $debughandle);

    curl_setopt($ch, CURLOPT_URL, $urlbase . "/question/import.php?courseid=" . $courseid); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $result = curl_exec ($ch);
    curl_close ($ch);

    if (!preg_match("/sesskey=(\w*)/", $result, $matches))
    {
    unlink($cookiefile);
    header("HTTP/1.0 500 Internal Server Error");
    die("Could not determine sesskey.\n");
    }

    $sesskey = $matches[1];

    echo $result;
?>

Любая помощь будет принята с благодарностью. Все, что я получаю в данный момент, это «Неверное имя пользователя/пароль».

Я пытался следовать коду, размещенному здесь -> http://moodle.org/mod/forum/discuss.php?d=153580 Заранее спасибо.


person Julian Pittas    schedule 02.08.2011    source источник


Ответы (1)


Кажется, я понимаю, что вы пытаетесь сделать, но это очень неэффективный способ. Гораздо лучшим подходом было бы использование веб-сервисов для подключения с использованием XMLRPC или SOAP (очень просто с использованием встроенных библиотек PHP) и запроса необходимой информации таким образом. В Moodle 2.0 встроен стек веб-сервисов — просто включите его, следуя инструкциям здесь. Moodle 1.9 потребует от вас добавления плагина, несколько из которых находятся в каталоге модулей и плагинов. Веб-службы OKTech, возможно, лучше всего.

Какую информацию вы на самом деле хотите от первой страницы?

person Matt Gibson    schedule 16.02.2012