开发者

Download moodle mainpage using cURL

Hi I'开发者_StackOverflowm having some trouble with logging in and downloading a web page. What i'm trying to do is log on to my school's moodle site and save the main page in a string so i can use a parser to pick out certain information and build a gwt app.

this is what I have so far: in 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>

in 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;
?>

Any help would be greatly appreciated. All I'm receiving at the moment is "Username/password incorrect."

I've been trying to follow the code posted here -> http://moodle.org/mod/forum/discuss.php?d=153580 Thanks in advance.


I think I see what you are trying to do, but this is a very inefficient way of doing it. A far better approach would be to use webservices to connect using XMLRPC or SOAP (very easy using PHP's built in libraries) and request the information you need that way. Moodle 2.0 has a webservice stack built in - just enable it as per instructions here. Moodle 1.9 will need you to add a plugin, of which there are several on the modules and plugins directory. OKTech Webservices is perhaps the best.

What information do you actually want from the front page?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜