problème extension cURL

Eléphant du PHP | 259 Messages

06 mai 2008, 19:33

Bonjour

j'ai un petit problème avec cURL pour maintenir une session ouverte
j'arrive a envoyer des requêtes get et post avec succès pour me connecter à un espace membre

mais je n'arrive pas à continuer à naviguer dans l'espace membre, ma session est fermée automatiquement

a priori celà ne vient pas du site car j'ai essayé sur deux sites différents qui utilisent des cookie pour envoyer l'identifiant de session et j'ai bien le cookie sur l'hébergement

voici mon code :
function requete_get($url,$cookie='r',$referer='')
	{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
	//curl_setopt($ch, CURLOPT_HTTPHEADER, header_http());
	curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
	//curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14');
	curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
	if($cookie=='w')
		{
		curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('cookie.txt'));
		}
	elseif($cookie=='r')
		{
		curl_setopt($ch, CURLOPT_COOKIEFILE, realpath('cookie.txt'));
		}
	curl_setopt($ch, CURLOPT_REFERER, $referer);
	//curl_setopt($ch, CURLOPT_USERPWD, 'user:mdp');
	$ret = curl_exec($ch);
	if ($ret === FALSE) 
		{
		echo '<br>ERREUR CURL : '.curl_error();
		return false;
		}
	else
		{
		curl_close($ch);
		return $ret;
		}
	}
function requete_post($url,$array,$cookie='r',$referer='')
	{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
	curl_setopt($ch, CURLOPT_HTTPGET, FALSE);
	curl_setopt($ch, CURLOPT_POST, TRUE);
	curl_setopt($ch, CURLOPT_POSTFIELDS,$array);
	//curl_setopt($ch, CURLOPT_HTTPHEADER, header_http());
	//curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14');
	curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
	if($cookie=='w')
		{
		curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('cookie.txt'));
		}
	elseif($cookie=='r')
		{
		curl_setopt($ch, CURLOPT_COOKIEFILE, realpath('cookie.txt'));
		}
	curl_setopt($ch, CURLOPT_REFERER, $referer);
	$ret = curl_exec($ch);
	if ($ret === FALSE) 
		{
		echo '<br>ERREUR CURL : '.curl_error();
		return false;
		}
	else
		{
		curl_close($ch);
		return $ret;
		}
	}
/********************************************
fonction qui ouvre un fichier selon le mode choisit et créé un pointeur
********************************************/	
function fichier_ouvrir($fichier_nom,$mode)
	{
	if(($fichier_pointeur=@fopen($fichier_nom,$mode))!=false)
		{
		return $fichier_pointeur;
		}
	else
		{
		return false;
		}
	}

/********************************************
fonction qui ferme un pointeur
********************************************/	
function fichier_fermer($fichier_pointeur)
	{
	if(($fermeture=@fclose($fichier_pointeur))!=false)
		{
		return true;
		}
	else
		{
		return false;
		}
	}

/********************************************
fonction qui lit les lignes du fichier à partir de la position du pointeur
et retourne un tableau : une case pour chaque ligne
********************************************/	
function fichier_lire($fichier_pointeur)
	{
	$retour=array();
	while(!feof($fichier_pointeur))
		{
		if(($tmp=@fgets($fichier_pointeur))!=false)
			{
			$retour[]=$tmp;
			}
		}
	return $retour;
	}
function lire_cookie()
	{
	$fich=fichier_ouvrir('cookie.txt','r');
	if($fich==false)
		{
		echo'<br>erreur ouverture cookie';
		}
	else
		{
		$cookie=fichier_lire($fich);
		fichier_fermer($fich);
		echo'<br>---- cookie ----<br>';
		while (list($clee, $valeur) = each($cookie))
			{
			echo'<br>::: '.$valeur;
			}
		}
	}
if(verification_page('xxxxxxx'))
	{
	$data=requete_get('xxxxxxx');
	preg_replace('`\<head\>.*\</head\>`','',$data);
	echo'<hr><br><textarea style="height:100px; width:100%">'.$data.'</textarea>';
lire_cookie();

	$data2=requete_post('xxxxxxx/index.php?page=connect2',
		array('mail'=>'xxxxxxx',
		'pass'=>'xxxxxxx'),'w','xxxxxxx/index.php?page=accueil');
	preg_replace('`<head>.*</head>`','',$data2);
	echo'<hr><br><textarea style="height:100px; width:100%">'.$data2.'</textarea>';
lire_cookie();
	
	$data3=requete_get('xxxxxxx/index.php?page=moncompte','r');
	preg_replace('`\<head\>.*\</head\>`','',$data3);
	echo'<hr><br><textarea style="height:100px; width:100%">'.$data3.'</textarea>';
lire_cookie();
	
	if(preg_match('`/index\.php\?page=deconnect`',$data3))
		{
		echo'<br>connecté';
		}
	else
		{
		echo'<br>déconnecté';
		}
	}
et voici le résultat affiché à l'écran :
---- cookie ----

::: # Netscape HTTP Cookie File
::: # http://www.netscape.com/newsref/std/cookie_spec.html
::: # This file was generated by libcurl! Edit at your own risk.
:::
::: www.xxx.com FALSE / FALSE 0 PHPSESSID 4fef5b69365f46caf10508466b8fea13

---- cookie ----

::: # Netscape HTTP Cookie File
::: # http://www.netscape.com/newsref/std/cookie_spec.html
::: # This file was generated by libcurl! Edit at your own risk.
:::
::: www.xxxxxx.com FALSE / FALSE 0 PHPSESSID 57f8db16076f5e59ddd53f6c6dc94d3d

---- cookie ----

::: # Netscape HTTP Cookie File
::: # http://www.netscape.com/newsref/std/cookie_spec.html
::: # This file was generated by libcurl! Edit at your own risk.
:::
::: www.xxx.com FALSE / FALSE 0 PHPSESSID 57f8db16076f5e59ddd53f6c6dc94d3d
déconnecté
voyez vous quelque chose qui ne va pas dans mon code ?
personnellement j'y suis depuis hier midi et je ne trouve pas

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

ViPHP
ViPHP | 4674 Messages

07 mai 2008, 23:38

Hey :),

Je note que tu n'as pas de réponses et j'ose te faire une suggestion. Essaye de synthétiser un peu ton problème. J'imagine que c'est pareil pour mes collègues, quand on voit tout ton code, moi j'ai fais une chose : je suis allé à la fin du message sans rien lire. Il y en a un peu beaucoup (voire beaucoup trop). On lit beaucoup de code (et peu de français), alors mâche nous un peu le problème et je suis sûr qu'on va plus facilement s'y attarder :).

Synthétiser t'aiderait sûrement à reformuler ton problème et donc à trouver un début de solution par toi-même. N'oublies pas que ce qui se conçoit s'énonce clairement, et les mots pour le dire viennent aisément.

Ce qu'il faut comprendre c'est que je suis trop fatigué pour dépiauter ton code et que j'apprécierais que tu poses une question clair au lieu de balancer 300 lignes de code ;-).
Dans ton dernier exemple, tu nous donnes une suite de tests ; c'est un excellent réflexe ! Tu compares tes données etc., mais ... ça correspond à quoi ? C'est sûrement clair pour toi, mais pas pour moi :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 259 Messages

08 mai 2008, 10:47

slt

en fait le problème est que j'ai toujours le cookie mais que m'a session disparait

pour résumer mon code,
1- je regarde si la page existe
2- j'envoie une requête get pour aller sur la page d'accueil
3- j'envoie une requête post pour simuler le formulaire de connexion , j'arrive sur l'espace membre
4- j'envoie une requête get pour aller sur l'espace membre mais la je suis déconnecté

si j'ai mis tout mon code c'est par ce que d'habitude on me le demande en entier

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 mai 2008, 13:08

Modération :
yuuzhantar, le multipostage est interdit sur le forum.

Merci de prendre le temps de lire les règlements.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 259 Messages

09 mai 2008, 21:00

désolé mais personne ne répondais dans php5
alors j'ai été dans le forum le plus visité

sinon personne ne connait-il cURL ?

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites