Fermer2
SasumeLe 15/01/2010 à 22:01
L’ENT de ma fac permet de consulter son emploi du temps en ligne avec un service très chiant à utiliser, il faut faire 50 clics avant d’arriver à son emploi du temps.
J’aimerais bien automatiser ça, pour ça je peux me contenter de rejouer les requêtes qui sont jouées quand je fais la manip en vrai, n’est-ce pas ?
Grâce à l’extension httpfox j’ai plein de détails sur les requêtes réalisées par le navigateur, je récupère donc leur liste, je fais gaffe à renvoyer le cookie de session qui m’est donné au démarrage mais … ça ne marche pas, à la fin je n’obtiens pas le bon résultat. sad
Quelles sont les subtilités auxquelles je n’ai pas pensé ? Est-ce que le script côté serveur a un moyen de détecter que je suis en train de réaliser les requêtes avec un script php maison qui s’exécute sur ma machine plutôt qu’à partir de leur interface web et peut me blâmer en conséquence ?

Pour info, l’interface web permettant d’accéder aux emplois du temps est ici

Et voici le script que j’ai écrit (qui contient encore des print_r de débugage). <? require_once "HTTP/Request.php"; $referer = null; $cookie = null; function setup() {   $GLOBALS['referer'] = "http://plannings.univ-rennes1.fr/ade/standard/gui/interface.jsp?login=sansesame&password=sans2007&projectId=44";   $req = new HTTP_Request($GLOBALS['referer']);   $req->addHeader('Keep-Alive', '300');   $req->addHeader('Connection', 'keep-alive');   $req->addHeader('Host', 'plannings.univ-rennes1.fr');   $rep = $req->sendRequest();      if(PEAR::isError($rep)) {     echo $rep->getMessage();     die();   }   /* Récupération du cookie */   $cookies = $req->getResponseCookies();   $GLOBALS['cookie'] = $cookies[0]; // HACK Pour l’instant le système ne renvoie qu’un cookie, ça pourrait changer… } function sendHttpRequest(& $req) {   $req->addHeader('Keep-Alive', '300');   $req->addHeader('Connection', 'keep-alive');   $req->addHeader('Host', 'plannings.univ-rennes1.fr');   $req->addHeader('Referer', $GLOBALS['referer']);   $req->addCookie($GLOBALS['cookie']['name'], $GLOBALS['cookie']['value']);   $rep = $req->sendRequest();   if(PEAR::isError($rep)) {     echo $rep->getMessage();     die();   } } /* Initialisation, récupération du cookie */ setup(); /* Sélection de l’emploi du temps */ $req = new HTTP_Request("http://plannings.univ-rennes1.fr/ade/standard/gui/tree.jsp?selectId=17&reset=true&forceLoad=false&scroll=0"); // 17 = GL2.2 sendHttpRequest($req); print_r($req->getResponseBody()); /* Génération de l’image */ $req = new HTTP_Request("http://plannings.univ-rennes1.fr/ade/custom/modules/plannings/imagemap.jsp?width=802&height=361"); sendHttpRequest($req); print_r($req->getResponseBody()); die(); $xml = new SimpleXMLElement($req->getResponseBody()); $url_img = $xml->BODY->img['src']; /* Récupération de l’image */ $req = new HTTP_Request($url_img); //$req->addCookie($cookie['name'], $cookie['value']); $rep = $req->sendRequest(); header("Content-type: image/gif"); echo $req->getResponseBody(); ?>
L’idée est d’afficher automatiquement juste l’image gif correspondant à mon emploi du temps à moi.