Connexion à un site avec Curl

Fermé
bobby - Modifié par bobby le 23/02/2015 à 19:07
 bobby - 23 févr. 2015 à 19:35
Bonjour,

je suis en train de créer un site qui tous les jours se connecterai à un autre site, récupérerai les données et les enregistrerai dans une vdd afin qu'en suite les données soit utilisées pour faire des tableaux comparatifs, des graphiques etc... sur ma page.
Pour cela il faut que je me connecte à un site web.
Je souhaiterai donc utiliser Curl, mais après de vains essais je suis obligé de capituler et de venir demander votre aide.

Voici ce que j'utilise
<?php
$lien = 'site.com';
$postfields = array(


        'pseudo' => 'monpseudo',         'password' => 'monmdp
);
$path_cookie = 'cookies_connexion.txt';
if (!file_exists(realpath($path_cookie))) touch($path_cookie);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $lien);
curl_setopt($curl, CURLOPT_COOKIESESSION, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields); 
curl_setopt($curl, CURLOPT_COOKIEJAR, realpath($path_cookie)); 
$return = curl_exec($curl);
curl_close($curl);
echo $return;
unlink($path_cookie);
?>


Pour ce formulaire:

<form class="navbar-form pull-right" action="site.com/chargement.php" method="post">
        <input type="text"  size=10 class="input-sm form-control" name="pseud" placeholder="Pseudo">
        <input type="password"  size=8 class="input-sm form-control" name="passw" placeholder="Password">
        
        <button type="submit" class="btn btn-success btn-sm">Go</button>
         </form>


Quand j'exécute le code, ça ne marche pas.

J'ai essayé (pour voir ou mon code bloque) de m'inscrire au site (car la page comporte un autre formulaire d'inscription)

<?php
$lien = 'site.com/inscription.php';
$postfields = array(


        'pseudo' => 'nouveaupseudo',         'password' => 'mdp', 'password2' => 'mdp', 'email' => '***@***'
);
$path_cookie = 'cookies_connexion.txt';
if (!file_exists(realpath($path_cookie))) touch($path_cookie);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $lien);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields); 
curl_setopt($curl, CURLOPT_COOKIEJAR, realpath($path_cookie)); 
$return = curl_exec($curl);
curl_close($curl);
echo $return;
unlink($path_cookie);
?>
  


pour ce formulaire d'inscription:


                                      <form class="form-horizontal" role="form" action="inscription.php" method="post">
            <div class="form-group ">
            <label class="control-label col-lg-6 " for="pseudo"> Votre pseudo</label>
            
              <div class="col-lg-6">
             <input type="text" class="form-control input-medium" size='10' maxlength='16' name="pseudo" id="pseudo" value="" placeholder="Pseudo">
              <p class="help-block">Lettres uniquement</p>
              </div>
            </div>                           
            <div class="form-group ">
              <label for="email" class="col-lg-6 control-label">Email</label>
              <div class="col-lg-6">
             <input type="text" class="form-control" name="email" id="email" value="" placeholder="Email">
              </div>
            </div>
            <div class="form-group ">
              <label for="password" class="col-lg-6 control-label">Mot de passe</label>
              <div class="col-lg-6">
             <input type="password" class="form-control" size='10' maxlength='16'  name="password" id="password" placeholder="Password">
              </div>
            </div>
            <div class="form-group ">
           
              <label class="col-lg-6 control-label" for="password2"> retapez-le</label>
              <div class="col-lg-6">
             <input type="password" class="form-control" size='10' maxlength='16' name="password2" id="password2" placeholder="Password">
              </div>
            </div>
                              
           
            <div class="form-group">
              <div class="col-lg-offset-4 col-lg-12">
             <button type="submit" class="btn btn-primary">Inscription</button>
            
              </div>
            </div>
             </form>
            


La ça fonctionne, le echo $return; m'affiche le code source de la page cible du formulaire (qui est la meme que celle ou se trouve le formulaire (site.com/inscription.php) où on me dit que je suis bien inscrit, et je reçois les mails et tout.

Je pense comprendre que il faut que la page chargée dans $lien soit la page cible du formulaire dans le sens où quand je teste mon code sur la page site.com/inscription.php qui contient à la fois le formulaire et qui est la page de traitement de l'inscription ça fonctionne mais comme pour la connexion, la page de traitement est une autre page (la page cible du formulaire) où il n'y pas pas le formulaire de connexion (on passe de site.com à site.com/chargement.php)

Il faut savoir que la page chargement.php redirige aussitôt vers une page du type site.com/monprofil.php et donc je ne sais pas ce que contient la page chargement.php (elle contient juste la redirection car le code php évidemment est invisible)

Je voudrais préciser aussi que les deux formulaires de connexion et d'inscription sont tous deux présents sur la page inscription.php et que mon code curl comprend qu'il doit aller sur le formulaire d'inscription alors que je ne lui précise rien ... c'est peut être aussi de la que vient mon problème ...

Du coup je suis un peu perdu, je rame et je ne comprends plus rien.
J'espère que vous aurez compris car ce n'est pas forcément très clair.
Donc si vous avez une idée de mon problème merci beaucoup de votre réponse.

Merci beaucoup d'avance, cordialement Bobby.

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
23 févr. 2015 à 19:19
Bonjour,

1 - Il manque une quote dans ton array
2 - Le formulaire fait référence à "pseud" .. alors que toi tu utilises "pseudo" et "password" au lieu de "passw"

Par contre.. il n'y a pas de ID pour les input du formulaire qui ne fonctionne pas.... et je pense que le programme en a besoin pour trouver les champs et les remplir....
A tester.. je n'en suis pas sûr.
0
Pour le pseud et passw
je ne m'étais pas trompé dans mon vrai formulaire (c'est juste que la j'ai copié collé le mauvais ;))

qu'est ce que tu veux dire par il manque un quote dans mon array

Ca veut dire que si je renseigne des ID (s'il en existait) il saurait quel formulaire remplir ? Et en admettant qu'il y'ait un id où est ce que je renseigne cette donnée ?

Merci beaucoup pour ta précédente réponse ;)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié par jordane45 le 23/02/2015 à 19:29
Les ID .. toi tu ne peux rien y faire.....
Un élément HTML ( les input ici en l'occurence) peuvent avoir différents attribut :
name
size
type
...etc...
ET : ID !
Comme tu peux le constater.. dans le formulaire que tu nous montres..
<input type="text"  size=10 class="input-sm form-control" name="pseud" placeholder="Pseudo">
        <input type="password"  size=8 class="input-sm form-control" name="passw" placeholder="Password"> 

il y a bien un attribut NAME .. mais pas d' ID ..

Contrairement à l'autre formulaire (qui fonctionne...)
 <input type="text" class="form-control input-medium" size='10' maxlength='16' name="pseudo" id="pseudo" value="" placeholder="Pseudo">


Pour ce qui est de la quote manquante.. tu as écris :
$postfields = array(
        'pseudo' => 'monpseudo',         'password' => 'monmdp
);

..et tu vois bien qu'apèrs monmdp.. il manque une quote
$postfields = array( 'pseudo' => 'monpseudo',  'password' => 'monmdp');
0
Le quote effectivement c'est encore une fausse erreur car j'ai copié collé que le code pour l'inscription et j'ai changé en mal renotant tout :o.

Ok donc le fait que pour l'inscription il y'ait un ID ça change alors.
Mais ce que je ne comprends pas c'est que lorsque j'effectue le curl pour l'inscription sur la page site.com (où il y'a les deux formulaires) ça ne m'inscris pas mais sur la page cible où se trouvent aussi les deux formulaires (site.com/inscription.php) l'inscription fonctionne. Pourtant le code est le même (sauf la variable $lien) et les formulaires aussi ...
0