Bonjour,
je cherche à récupérer automatiquement des données sur un site. L'accès à ces données nécessite une authentification. J'utilise donc cURL pour envoyer les paramètres requis en POST.
Jusque là, je parviens bien à me connecter.
Par la suite, je veux récupérer des données sur une autre page. J'envois donc une seconde requête vers cette seconde page mais je ne peux pas y accéder car la session n'a pas été maintenue.
J'ai bien utilisé les options CURLOPT_COOKIEJAR et CURLOPT_COOKIEFILE pour conserver les cookies dans un fichier et les utiliser lors de ma seconde requête.
Voilà ma source:
Merci de votre aide
je cherche à récupérer automatiquement des données sur un site. L'accès à ces données nécessite une authentification. J'utilise donc cURL pour envoyer les paramètres requis en POST.
Jusque là, je parviens bien à me connecter.
Par la suite, je veux récupérer des données sur une autre page. J'envois donc une seconde requête vers cette seconde page mais je ne peux pas y accéder car la session n'a pas été maintenue.
J'ai bien utilisé les options CURLOPT_COOKIEJAR et CURLOPT_COOKIEFILE pour conserver les cookies dans un fichier et les utiliser lors de ma seconde requête.
Voilà ma source:
<?php
// Chemin du fichier d'enregistrement des cookies
define('COOKIE_FILE',__DIR__.'/cookies');
// Nom d'utilisateur pour la connexion
define('SIGNIN_USERNAME','**********');
// Mot de passe pour la connexion
define('SIGNIN_PASSWORD','**********');
// URL du script de connexion
define('SIGNIN_URL','http://www.site.com/connexion');
// URL du calendrier
define('SCHED_URL','http://www.site.com/données');
// Message de confirmation de connexion
define('SIGNIN_MESSAGE','CONNEXION ETABLIE');
// Message de confirmation de l'obtention de l'emploi du temps
define('SCHED_MESSAGE','Emploi du temps Filières');
// Agent utilisateur utilisé pour les requêtes
define('USER_AGENT','User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/601.1.56');
// Affichage des erreurs
define('DISPLAY_ERROR',true);
// Affichage d'un message d'erreur
function error($message) {
if(DISPLAY_ERROR) echo htmlentities($message);
return false;
}
// Envoi d'une requête HTTP avec cURL
function curl_request($url,$param) {
if(!file_exists(COOKIE_FILE)) {
if(!touch(COOKIE_FILE)) return error('Impossible de créer le fichier d\'enregistrement des cookies.');
else chmod(COOKIE_FILE,0777);
}
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_USERAGENT,USER_AGENT);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,$param);
curl_setopt($curl,CURLOPT_COOKIESESSION,true);
curl_setopt($curl,CURLOPT_COOKIEJAR,COOKIE_FILE);
curl_setopt($curl,CURLOPT_COOKIEFILE,COOKIE_FILE);
$output=curl_exec($curl);
return $output;
}
// Récupération de l'emploi du temps pour un groupe et une semaine donnée
function get_sched($group,$year,$week) {
// Supression du fichier d'enregistrement des cookies
if(file_exists(COOKIE_FILE)) @unlink(COOKIE_FILE);
// Détection d'erreurs dans les paramètres
if($group!='LP' && $group!='MMI' && $group!='LP') return error('Le groupe indiqué n\'existe pas.');
if(($year!=1 && $year!=2) || ($year==2 && $group=='LP')) return error('L\'année d\'enseignement indiquée n\'existe pas.');
if($week>53 || $week<1) return error('La semaine indiquée n\'existe pas.');
// Correspondance entre les paramètres fournis et les numéros de semestres
$semesters=[
['semester'=>'1','year'=>1,'begin'=>38,'end'=>1],
['semester'=>'2','year'=>1,'begin'=>2,'end'=>15],
['semester'=>'3','year'=>2,'begin'=>38,'end'=>1],
['semester'=>'4','year'=>2,'begin'=>2,'end'=>15]
];
// Association du semestre correspondant aux paramètres
foreach($semesters as $s) {
if($s['year']==$year && $week>=$s['begin'] && $week<=$s['end']) {
$group.='_S'.$s['semester'];
break;
}
}
// Paramètres de connexion
$signin_param=[
'modeglobal'=>'',
'modeconnect'=>'connect',
'util'=>SIGNIN_USERNAME,
'acct_pass'=>SIGNIN_PASSWORD
];
// Paramètres de récupération de l'emploi du temps
$sched_param=[
'mode'=>'edt',
'idee'=>'',
'aller'=>'',
'semaine'=>strval($week),
'liste'=>'-1',
'aff_edtabs'=>'-1',
'ansemaine'=>($week<38 ? '2016' : '2015'),
'idedtselect'=>'0',
'jouredt'=>'',
'debutedt'=>'',
'copiercouper'=>'',
'left'=>'0',
'top'=>'0',
'taillepolice'=>'10',
'onglet_actif'=>'1',
'filiere'=>$group
];
// Connexion
$output=curl_request(SIGNIN_URL,$signin_param);
if(strpos($output,SIGNIN_MESSAGE)===false) return error('Erreur lors de la connexion.');
// Récupération de l'emploi du temps
$output=curl_request(SCHED_URL,$sched_param);
if(strpos($output,SCHED_MESSAGE)===false) return error('Erreur lors de la récupération de l\'emploi du temps.');
// Supression du fichier d'enregistrement des cookies
if(file_exists(COOKIE_FILE)) @unlink(COOKIE_FILE);
// Retour de l'emploi du temps
return $output;
}
?>
Merci de votre aide