2011-08-02 3 views
0

Salut J'ai des problèmes avec la connexion et le téléchargement d'une page Web. Ce que j'essaie de faire est de se connecter au site moodle de mon école et enregistrer la page principale dans une chaîne afin que je puisse utiliser un analyseur pour sélectionner certaines informations et créer une application gwt.Télécharger moodle mainpage using cURL

c'est ce que j'ai jusqu'à présent: dans 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> 

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

Toute aide serait grandement apprécié. Tout ce que je reçois en ce moment est "nom d'utilisateur/mot de passe incorrect."

J'ai essayé de suivre le code affiché ici ->http://moodle.org/mod/forum/discuss.php?d=153580 Merci d'avance.

Répondre

0

Je pense que je vois ce que vous essayez de faire, mais c'est une façon très inefficace de le faire. Une approche bien meilleure consisterait à utiliser des services web pour se connecter en utilisant XMLRPC ou SOAP (très facilement en utilisant les bibliothèques intégrées de PHP) et demander les informations dont vous avez besoin de cette façon. Moodle 2.0 a une pile webservice intégrée - il suffit de l'activer selon les instructions here. Moodle 1.9 aura besoin de vous pour ajouter un plugin, dont il existe plusieurs sur le répertoire modules et plugins. OKTech Webservices est peut-être le meilleur.

De quelles informations voulez-vous réellement sur la première page?