IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

cURL et récupération des POST sur le serveur distant


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut cURL et récupération des POST sur le serveur distant
    Bonjour à tous !

    je souhaite permettre à mes utilisateurs de ne plus avoir à se connecter plusieurs fois pour accéder à mes sites (base de données membres commune aux sites).

    pour cela, j'utilise cURL qui envoie par un POST les identifiants de connexion sur l'autre site. Cela fonctionne car je reçois bien un tableau associatif, mais je suis incapable d'utiliser les données qu'il contient.

    Voici plus d'éléments :

    Code qui fait l'envoi du POST par cURL et qui fait la redirection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    $loginUrl   = "http://www.mon-site-cible/index.php";
     
    $data = array('emailCURL' => $_SESSION['email'],
                  'passCURL' => $_SESSION['pass']
                  );
     
     
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_NOBODY, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_USERAGENT,
        "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
     
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_exec($ch);
     
    curl_setopt($ch, CURLOPT_URL, $loginUrl);
    //do stuff with the info with DomDocument() etc
    $html = curl_exec($ch);
    curl_close($ch);
     
    header('location: '.$loginUrl.'');


    Pour vérifier que je reçois bien dans mon site cible, en début de page, j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mail("mon_adresse_email", "Post", print_r($_POST, true));


    Et je reçois bien : Array
    (
    [emailCURL] => mon_email
    [passCURL] => Mon_mot_de_passe
    )



    MAIS : impossible de réutiliser sous forme $_POST['emailCURL'] pour lancer la connexion...

    Merci beaucoup de m'aider, je sens que je ne suis pas loin de la solution

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut toujours pas trouvé malgré mes efforts......
    Si vous trouvez, SVP

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi il t'est "impossible de réutiliser" la variable ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    C'est tout le mystère !

    j'arrive à m'envoyer les variables puisque sur le site cible, la première ligne est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mail("mon_adresse_email", "Post", print_r($_POST, true));
    et je reçois bien un email avec les variables.

    Cependant je ne peux ni les afficher sous forme de tableau :
    print_r($_POST) renvoie un tableau VIDE : array ()
    print_r($_POST, true) ne renvoie rien

    ni les utiliser directement sous forme de variable $_REQUEST['emailCURL'] ou $_POST['emailCURL']

    Après je me suis lâché : j'ai tout balancé :

    foreach($_POST as $key => $val) echo '$_POST["'.$key.'"]='.$val.' <br>';
    foreach($_GET as $key => $val) echo '$_GET["'.$key.'"]='.$val.' <br>';
    foreach($_SESSION as $key => $val) echo '$_SESSION["'.$key.'"]='.$val.' <br>';
    foreach($_REQUEST as $key => $val) echo '$_REQUEST["'.$key.'"]='.$val.' <br>';

    et je n'obtiens rien non plus !!




    JE N'Y COMPRENDS RIEN : si je peux m'envoyer les variables par email, je devrais pouvoir les afficher et les utiliser !!!!!!!!!!!!!!!!!!!!!!!!!

    Pour info, voici mon code sur le fichier "http://www.mon-site-cible/index.php"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
     
    echo "<h1>TEST</h1>";
    echo "<pre>";
    echo "Tableau Print_r avec true";
    print_r($_POST, true);                      // n'affiche rien
     
    echo "<br>";
     
    echo "Tableau Print_r sans true";
    print_r($_POST);                             // affiche un tableau vide
     
    echo "</pre>";
     
    mail("mon_email@email.com", "Post", print_r($_POST, true));           // fonctionne très bien !! je reçois mes variables par email sous forme de tableau : Array([emailCURL] => mon_email; [passCURL] => Mon_mot_de_passe) 
     
     
    ?>

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Dans le doute .... je viens de tester si cURL est bien activé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (extension_loaded('curl')) {
        echo "curl est dispo";
    } else {
        echo "curl n'est pas dispo";
    }
    .... et c'est bon !! (cURL dispo)

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    D'une part ton code avec cURL ne fait qu'envoyer la requête, il n'affiche pas le résultat, donc tous tes echo vont dans le vide.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    merci de ta réponse.
    Comment faire pour alors pour afficher les variables transmises sur le site cible ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le retour du serveur c'est ton $html.
    Mais bon ton envoi POST doit être fait sur la page d'authentification du deuxième site (enfin la page qui valide l'authentification).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Disons que pour faire l'authentification, je voulais avant être sûr de retrouver les variables pour m'identifier.
    Une fois que je peux les afficher, je peux faire l'authentification automatique...

    par contre, je suis désolé, mais je n'ai pas compris pour le $html...

    Comment puis-je faire pour que le POST soit pris en compte ?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton $_POST est bien pris en compte (la preuve tu reçois son contenu par mail).
    L'affichage resultant de la requête est le retour de la fonction curl_exec, c'est donc ta variable $html.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Ok, compris !

    mais du coup comment faire pour que je puisse utiliser l'email et le mot de passe ?
    à partir du $html ?

    J'ai affiché $html et j'obtiens le rendu attendu de la page du site distant sur le site initial (je ne suis donc pas sur http://www.mon-site-cible/index.php) :
    dans ce cas les variables que je n'arrive pas à afficher sur le site distant sont ici bien affichées :

    TEST

    Tableau Print_r avec true :
    Tableau Print_r sans true : Array
    (
    [email] => mon_email
    [pass] => mon_mot_de_passe
    )

    je suis en train de me demander si je ne pourrais pas faire l'inverse :

    - lancer le site distant depuis le site initial avec un header().
    - le site cible récupère les identifiants sur le initial avec cURL
    - faire mon identification...

    il faut que je teste cela... ça pourrait marcher ?

    en tout cas merci de l'intéresser à mon problème, sabotage, je me sens moins seul

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    mais du coup comment faire pour que je puisse utiliser l'email et le mot de passe ? à partir du $html ?
    Tu te focalises sur cet histoire d'affichage.

    curl envoie les données POST comme tu lui demandes.
    Le script de destination s'execute de la même façon que si tu avais soumis un formulaire par exemple.
    Dans ta page cible $_POST['email'] existe avec la valeur que tu as envoyé. point.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut Nouvel essai infructueux !
    J'ai mis un script d'identification dans test.php (puisque cela devrait fonctionner comme avec un POST par formulaire classique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <?PHP
     
    ini_set('display_errors', 1);
    include ("commun/connect.php");
     
     
     
     
    if (isset($_POST['email']) && isset($_POST['pass'])) {
     
      $resConnect = $bddDR->prepare("SELECT * FROM $table_membre WHERE email = :email");
     
      $resConnect->execute(array(
        'email' => $_POST['email']
        ));
     
      $NbresConnect = $resConnect->rowCount();
     
     
      if ($NbresConnect==0) {    
                                $alert="Cette adresse email ne figure pas dans notre base de donn&eacute;es!";
                                session_destroy();
                                session_start();
                                }
     
     
    elseif ($NbresConnect==1)  {
     
     
    while ($r = $resConnect->fetch())
    {
     
     
          if (($r['verif_email'])!=2) {           // si Email non validé
             $alert="ADRESSE EMAIL NON VERIFIEE : Regardez dans vos emails (et les SPAM) pour cliquer sur le lien qui activera votre compte ; sinon allez sur le menu pour vous renvoyer un email de validation";
             session_destroy();
             session_start();
                                      }
     
        else { 
     
          if (($r['pass1'])==encryptIt($pass) or ($r['pass1'])==$pass) { //accès OK
           $_SESSION['email']=$r['email']; $_SESSION['pass']=$r['pass1']; $connect=1;
           $alert="Connexion OK";
                                                                       } 
     
        else {
     
          $alert="Erreur de mot de passe";
          session_destroy();
          session_start();
            }
     
            }
     
    }
     
    }
     
     
    else {   
             $alert="Plusieurs comptes sont enregistr&eacute;s avec cette adresse email : merci de contacter le webmaster";
             session_destroy();
             session_start();
     
           }
     
     
     
    $resConnect->closeCursor();
     
    };
     
     
     
     
     
    echo "<h1>TEST</h1>";
     
    if (isset($_SESSION['email'])) {  echo "<h1>CONNECTE !</h1>"; };
     
     
     
     
    echo "<pre>";
    echo "Tableau Print_r sans true : ";
    print_r($_POST);
    echo "</pre>";
    mail("mon_email@email.com", "Post", print_r($_POST, true));
     
    if (isset($alert)) echo "<h1>".$alert."</h1>";
     
    ?>
     
    <form method="post" role="form" action="">
        <input type="email" name="email" placeholder="Email">
        <input type="password" name="pass" placeholder="Mot de passe">
      <button type="submit" name="ok" value="Ok">OK</button>
    </form>

    => cela fonctionne quand je valide le formulaire.
    => cela ne fonctionne pas avec cURL ..................................

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut debuguer un peu mon ami pas seulement essayer quelque chose et dire "ça marche pas".
    Déjà contrôle ce que renvoie la page test.php, cela permettra de voir si l'authentification est validée (comme je t'ai dit le retour est contenu dans $html du script curl).
    Donc
    Si tu as bien une connexion validée, c'est que la partie "comme un formulaire" fonctionne bien.

    Ensuite comme il y a une session, il faut que ton instance cURL soit configurée pour utiliser les cookies ... et sûrement forcer l'id de session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    session_start();
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookiejar');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
    session_write_close();
    $cookie_session =  'PHPSESSID=' . $_COOKIE['PHPSESSID'];
    curl_setopt( $ch, CURLOPT_COOKIE, $cookie_session . '; path=/);
    Et eventuellement accéder à l'autre site en re-spécifiant l'id de session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="http://autresite/page.php?' . $cookie_session . '">Autre site</a>';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Ok, ok !
    Déjà la connexion fonctionne quand j'affiche $html.
    je regarde pour les cookies...

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster amateur

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Désolé, après de nombreux tests....

    cela ne fonctionne pas....j'ai eu une autre idée pour faire ce que je veux faire...... je vais essayer cela.

    merci à Sabotage pour son aide !!!!!!!!!!!!!

    Amitiés, à tous

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/04/2013, 02h33
  2. Réponses: 5
    Dernier message: 09/01/2012, 09h19
  3. Recupérer des infos sur un serveur distant via oracle 10g
    Par TAMBOOH dans le forum Administration
    Réponses: 0
    Dernier message: 05/12/2008, 09h46
  4. [FTP] Récupération de fichier sur un serveur distant
    Par valouche dans le forum Langage
    Réponses: 15
    Dernier message: 06/03/2008, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo