Parser une page HTML avec mot de passe

Parser une page HTML avec mot de passe - PHP - Programmation

Marsh Posté le 04-11-2009 à 18:20:11    

Bonjour tout le monde,
 
Je suis en train de créer un script qui me permettrait de récupérer des informations sur un site (qui me l'autorise) mais la page sur laquelle je dois récupérer les informations est protégée par un login et mot de passe!
 
Comment puis tout d'abord me connecter sur cette page pour ensuite la parser avec un file_get_contents !
 
Merci d'avance
 
ps: bien evidemment je possede les login et mot de passe!  
 
j'ai essayé le code suivant mais malheureusement la page s'affiche comme si je n'etais pas authentifié...
 

Code :
  1. <?php
  2. function http_post($url, $data) {
  3.     $serialized_data = http_build_query($data);
  4.     $options = array(
  5.         'https' => array(
  6.             'method' => 'POST',
  7.             'header' => "Content-type: application/x-www-form-urlencoded\r\n" . 'Content-Length: ' . strlen($serialized_data) . "\r\n",
  8.             'content' => $serialized_data
  9.         )
  10.     );
  11.     $contexte = stream_context_create($options);
  12.     return file_get_contents($url, 0, $contexte);
  13. }
  14. $content = http_post('https://www.site.com/Events.do?s=00020914z-redirectDefault', array('username' => 'Vinceee38', 'password' => 'xxxxxxxxx', 'submit' => 'login'));
  15. echo $content;
  16. ?>


 
 
Merci d'avance

Reply

Marsh Posté le 04-11-2009 à 18:20:11   

Reply

Marsh Posté le 04-11-2009 à 18:37:53    

regarde plutôt du côté de curl
 
tu ouvres unes session curl
tu envoies ton formulaire d'identification
tu charges ta page protégée


---------------

Reply

Marsh Posté le 04-11-2009 à 18:56:11    

Merci pour ta réponse rapide!  
 
Je viens d'essayer avec curl mais je bloque un peu , ca me renvoie une page blanche encore une fois :(
 

Code :
  1. <?php
  2. $url = 'https://www.site.com/Events.do?s=00020914z-redirectDefault';
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, $url);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  6. curl_setopt($ch, CURLOPT_USERPWD, "login:password" );
  7. curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
  8. $output = curl_exec($ch);
  9. $info = curl_getinfo($ch);
  10. curl_close($ch);
  11. echo $output;
  12. ?>


Message édité par toregua le 04-11-2009 à 18:56:35
Reply

Marsh Posté le 08-11-2009 à 20:50:12    

Personne ne peut m'aider ? :(

Reply

Marsh Posté le 08-11-2009 à 21:50:58    

tu as lu ce que je t'ai proposé ?  
il faut d'abord charger ta page d'identification, en lui envoyant en post login et mot de passe
ensuite , tu charges ta page protégée


---------------

Reply

Marsh Posté le 08-11-2009 à 22:23:27    

apres tu pourra parser ta page avec DomDocument

Reply

Marsh Posté le 08-11-2009 à 22:35:37    

Salut flo850 et stealth35,
 
Flo850 justement je rencontre des difficultés pour envoyer un post login et mot de passe à ma page...tu pourrais pas m'aider avec du code justement ? merci bcp

Reply

Marsh Posté le 08-11-2009 à 22:39:06    

demain, je te mets un bout de code que j'ai utilisé


---------------

Reply

Marsh Posté le 08-11-2009 à 22:41:46    

merci bcp c'est trés gentil ! J'attend ton code avec impatience, je pourrais enfin avancer mon projet :)

Reply

Marsh Posté le 09-11-2009 à 11:39:19    

Personne d'autre ne peut m'aider en attendant ?

Reply

Marsh Posté le 09-11-2009 à 11:39:19   

Reply

Marsh Posté le 09-11-2009 à 11:43:42    

Code :
  1. $ch = curl_init(AUTHENTIFICATION);
  2.        curl_setopt($ch, CURLOPT_POST, TRUE);
  3.        curl_setopt($ch, CURLOPT_POSTFIELDS,
  4.            array(
  5.                'pseudo' => $_SESSION['sesUser']['login'],
  6.                'pwd' => $_SESSION['sesUser']['motpasse']
  7.            )
  8.        );
  9.        curl_setopt($ch, CURLOPT_URL,'http://monserveur/login.php');
  10.        curl_setopt($ch, CURLOPT_VERBOSE, 1);
  11.        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  12.        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
  13.  
  14.        curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__). '/cookie.txt');
  15.        curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
  16.        $ret = curl_exec($ch);
  17.  
  18.  
  19.        curl_setopt($ch, CURLOPT_URL, 'http://monserveur/ajax.inc.php');
  20.        curl_setopt($ch, CURLOPT_POST, TRUE);
  21.  
  22.        curl_setopt($ch, CURLOPT_POSTFIELDS,
  23.            array(
  24.                'grpName' => 'Limites operationnelles',
  25.                'reloadGrp' => 'oui'
  26.            )
  27.        );
  28.        $ret = curl_exec($ch);
  29.        curl_setopt($ch, CURLOPT_URL, $url);
  30.        curl_setopt($ch, CURLOPT_POST, FALSE);
  31.  
  32.        $ret = curl_exec($ch);


Message édité par flo850 le 09-11-2009 à 11:43:49

---------------

Reply

Marsh Posté le 02-12-2009 à 17:31:25    

Bonjour,
 
Je suis tombé sur ce message et je dois dire que je suis un peu perdu.
C'est la première fois que j'entend parlé de curl. J'ai bien compris le principe, mais difficile de le mettre en pratique !
 
Mon problème est le même que toregua. Je me suis inscrit sur un site qui met en ligne tout les jours de nouvelles informations. J'aimerais pouvoir me connecter à ce site (identifiant et mot de passe) pour pouvoir récupérer ces informations et les stocker sur mon ordinateur. Je ne peux avoir internet que sur une certaine plage horaire, pendant laquelle je travaille. Le but est de pouvoir lire ces informations même sans internet (mon ordinateur lançant automatiquement le script PHP à une heure précise).
 
J'ai essayé d'adapter le code de flo850, mais ça me permet difficile ! Voilà ce que j'ai fait :

Code :
  1. $ch = curl_init(AUTHENTIFICATION);
  2. curl_setopt($ch, CURLOPT_POST, TRUE);
  3. curl_setopt($ch, CURLOPT_POSTFIELDS, 'login=slagt&pass=*****');
  4. curl_setopt($ch, CURLOPT_URL, 'http://www.*****.com/login');
  5. curl_setopt($ch, CURLOPT_VERBOSE, 1);
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  7. curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
  8.  
  9. $ret = curl_exec($ch);
  10.  
  11. curl_setopt($ch, CURLOPT_URL, 'http://www.*****.com/infos');
  12. curl_setopt($ch, CURLOPT_POST, FALSE);
  13. $ret = curl_exec($ch);
  14.  
  15. echo $ret;
  16.  
  17. curl_close($ch);


 
Et bien sûr, ça ne fonctionne pas. L'echo m'affiche la page que l'on obtient lorsqu'on arrive sur le site en étant déconnecté. Je ne vois pas où se situe mon erreur. Une idée ?

Reply

Marsh Posté le 02-12-2009 à 17:45:43    

Essaye de rajouter cette ligne pour voir :
 

Code :
  1. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');


Reply

Marsh Posté le 02-12-2009 à 17:48:32    

tu devrai reprendre tout mon code , tu n'as pas repris les cookies  
 
        curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__). '/cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');


---------------

Reply

Marsh Posté le 02-12-2009 à 21:24:28    

Bonjour,
 
Merci pour votre réponse ^^
Maintenant ça... ne fonctionne toujours pas. Mais différemment !
 

Code :
  1. $ch = curl_init(AUTHENTIFICATION);
  2. curl_setopt($ch, CURLOPT_POST, TRUE);
  3. curl_setopt($ch, CURLOPT_POSTFIELDS, 'login=slagt&pass=*****');
  4.  
  5. curl_setopt($ch, CURLOPT_URL, $urlLogin);
  6. curl_setopt($ch, CURLOPT_VERBOSE, 1);
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  8. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  9.  
  10. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
  11. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
  12.  
  13. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
  14.  
  15. $ret = curl_exec($ch);
  16.  
  17. echo $ret;


 
Cette fois-ci je tombe sur la page du site me disant que le login est invalide. Ce qui est faux bien évidemment. En fait, je pense même que aucun login ni mot de passe n'est transmis. D'habitude, si on fait une erreur de login, on arrive sur cette page mais avec les champs pour retenter de se connecter pré-remplies (avec les login/passe qu'on a envoyé). Or là, ils sont vides !
 
Je ne vois pas bien d'où peut venir le problème.

Reply

Marsh Posté le 02-12-2009 à 21:29:42    

tu as essayé de fournir les postfields sous forme de tableaux ?


---------------

Reply

Marsh Posté le 02-12-2009 à 21:36:12    

Oui, comme ceci :

Code :
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, array('login' => 'slagt', 'pass' => '*****'));


 
Mais ça ne fonctionne pas mieux :s
 
EDIT : Bien sûr, j'ai vérifié "x" fois que les champs étaient bien nommés "login" et "pass" !


Message édité par slagt le 02-12-2009 à 21:37:15
Reply

Marsh Posté le 09-12-2009 à 11:12:57    

Aucune idée ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed