Cookies Session et CURL

grosteack Messages postés 25 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 17 août 2006 - 26 mai 2006 à 19:44
grosteack Messages postés 25 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 17 août 2006 - 29 mai 2006 à 10:14
Salut tout le monde.

Voilà mon souci, Je veux me logger sur un site en utilisant la librairie CURL (jusque là, c'est encore facile me direz-vous...)
Mais je rencontre un souci !
Si je recopie le formulaire HTML d'identification (avec tous les champs HTML cachés, etc...) et que je le valide manuellement, ca fonctionne. En revanche, si j'envoi exactement les mêmes données avec la méthode POST en code CURL, et bien le site me dit que mon login ou mot de passe est foireux.

J'ai alors modifié la cible du formulaire vers une page perso qui me "dump" le contenu du tableau $_POST, un petit winMerge et tout est identique ! C'est à s'arracher les cheveux !

Je pense avoir une idée concernant les cookies de session, etc... mais ma connaissance sur le sujet est trop maigre est c'est pourquoi je fais appel à vous...

Merci d'avance !

2 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 mai 2006 à 18:27
Hello,

difficile de t'aider sans connaître le mode d'identification du serveur en question.
Tu es certain qu'il n'y a pas de caractère spécial invisible en plus, dans ce que tu 'curles" ?
0
grosteack Messages postés 25 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 17 août 2006
29 mai 2006 à 10:14
Malheureusement, tout est en HTTPS donc même pas moyen de sniffer mes paquets pour comprendre quoi que ce soit !

Sinon, un print_r($_POST) donne exactement le même résultat pour mes deux méthodes. Voilà mon code :

<?
//GET FORM INFORMATIONS
$ch = curl_init();
$adresse='https://intrapril.april.fr';
curl_setopt($ch, CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_URL,$adresse);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$cookie='cookie.txt';
curl_setopt($ch,  CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
$form=curl_exec ($ch);

//GET ACTION ATTRIBUTE FROM THE FORM
$regex="!action=\ "(.*)\ "!isU";
$res=array();
preg_match_all($regex,$form,$res);
$action=$res[1][0];

//GET __VIEWSTATE HIDDEN VARIABLE
$regex="!name=\ "__VIEWSTATE\ " value=\ "(.*)\ "!isU";
$res=array();
preg_match_all($regex,$form,$res);
$viewstate=$res[1][0];

$adresse="https://intrapril.april.fr/IntraprilV2/UIL/Web/Partage/Cms/".$action;

$postfields="__EVENTTARGET=".
            "&__EVENTARGUMENT=".
            "&__VIEWSTATE=".urlencode($viewstate).
            "&Login1:noCorrespondant=".urlencode("<my_login>").
            "&Login1:MotDePasse=".urlencode("<my_password>").
            "&Login1:Connexion_x=10".
            "&Login1:Connexion_y=10";

curl_setopt($ch, CURLOPT_URL,$adresse);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch,
CURLOPT_POSTFIELDS,$postfields);

curl_exec ($ch);

curl_close($ch);

AND THE HTML ONE:
============
<form name="Login1:Form1" method="post" action="<? echo $adresse; ?>" id="Login1_Form1">

" />

</form>
0
Rejoignez-nous