8768 sujets

Développement web côté serveur, CMS

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:

<?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 Smiley smile