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

Bibliothèques et frameworks PHP Discussion :

Se connecter à un site distant avec Curl


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 16
    Points
    16
    Par défaut Se connecter à un site distant avec Curl
    Bonjour,

    Je dois créer une application permettant de se connecter à des sites automatiquement (on clique sur le nom du site, et on est connecté grâce aux informations entrées au préalables dans la base de données).

    pour premier essai j'ai choisi le forum des jeunes écrivains . J'ai donc été cherché dans le code source pour trouver le nom des champs. Il y a "username", "password" et "action" du formulaire appelle "/login"

    j'ai trouvé une méthode sur le site http://www.seoblackout.com/2008/02/13/soumission-automatique-formulaire/

    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
    function connecter($idSite){
        $userAgent="Mozilla/5.0";
        $donnees["action"]="submit";
        $donnees["username"]="*******";
        $donnees["password"]="*******";
        $site=$GLOBALS['s']->rechercherSite($idSite);
        $connexionSite = curl_init($site->getAdresse());
        curl_setopt($connexionSite, CURLOPT_POST, 1);
        curl_setopt($connexionSite, CURLOPT_POSTFIELDS, $donnees);
        curl_setopt($connexionSite, CURLOPT_USERAGENT, $userAgent);
        curl_setopt($connexionSite, CURLOPT_REFERER, 'http://localhost/gestionSites/index2.php');
        curl_setopt($connexionSite, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($connexionSite, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($connexionSite);
        curl_close($connexionSite);
        echo $result;


    Cependant, il m'affiche la page de connexion, sans me connecter au site. Il y a quelques points que je n'ai pas très bien compris:

    • Dans le 'action', dois-je mettre "submit" ou "/login"?
    • Qu'est ce que le REFERER exactement? D'après les sites ou j'ai cherché, cela serais la page d’où l'on vient, j'ai donc mis ma page, mais je ne suis pas sur du tout...
    • J'ai lu qu'il fallait utiliser FollowLocation pour aller sur la page, seulement si on avait utilisé un header, faut il faire le header après??




    Quelqu'un pourrait-il m'aider ou m'éclairer s'il vous plait?

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    essaye d'abord de te connecter au site en utilisant la console de développement de ton navigateur
    comme ça tu verras la requête HTTP qui est envoyée par le navigateur et tu comprendras mieux ce qui se passe à l'envoi d'un formulaire

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    merci de votre réponse, j'ai suivi votre conseil: Je me suis connecté au site en regardant ce qu'il se passait dans la console. D'après ce que j'ai vu, l'envoi se fait en trois étapes "Requête", 'Réponse' et "Requête de flux de téléchargement". Je suppose que ce qui m’intéresse est la requête, j'ai vu d'une part que le userAgent était en entier "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0" je l'ai donc modifié dans mon code, d'autre part j'ai vu que le Referrer était 'http://jeunesecrivains.superforum.fr/login' qui ciblait vers 'http://jeunesecrivains.superforum.fr'. J'ai donc tenté de mettre ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt($connexionSite, CURLOPT_REFERER, 'http://jeunesecrivains.superforum.fr/login');
    mais la page ne réagit toujours pas comme je voudrais, elle ne m'affiche pas la page d'un utilisateur connecté

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    D'après ce que j'ai pu trouver, il faudrait garder un cookie. J'ai trouvé ce code sur un exemple, et j'ai modifié les valeurs, mais cela ne fonctionne toujours pas. Dans l'exemple la personne se connectait à megaupload, il y avait 3 paramètres : username, password et login qu'il a mis a 1. Il a expliqué que login était propre a megauplod. Mais serait-ce tout de même une variable à adapter a chaque site??

    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
    function connecter($idSite){
    	$lien = 'http://jeunesecrivains.superforum.fr/login';
    $postfields = array(
    	'username' => '****',
    	'password' => '*****'
    	//~ 'login' => '1'
    );
    $path_cookie = 'cook.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);
     
    $lien2 = 'http://jeunesecrivains.superforum.fr/profile?mode=editprofile&page_profil=preferences';
     
    $curl = curl_init();
     
    curl_setopt($curl, CURLOPT_URL, $lien2);
    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_COOKIEFILE, realpath($path_cookie));
     
    $return = curl_exec($curl);
     
    curl_close($curl);
    echo $return;
    unlink($path_cookie);
     
    	}




    J'ai regardé la doc des différentes fonctions, et j'ai remarqué qu'elles retournaient souvent une valeur sur leur fonctionnement, j'ai donc mis plusieurs echo:

    Le fichier est bien créé en remplaçant par ce chemin:
    1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $path_cookie ='./cookie.txt';
    Par contre le fichier est vide, j'ai donc tenté
    1
    2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
    echo curl_setopt($curl, CURLOPT_COOKIEJAR, realpath($path_cookie));

    Et les deux me retournent 1, or d'après cette page http://curl.haxx.se/libcurl/c/libcur...s.html#CURLEOK

    on obtient ceci:

    "CURLE_UNSUPPORTED_PROTOCOL (1)

    The URL you passed to libcurl used a protocol that this libcurl does not support. The support might be a compile-time option that you didn't use, it can be a misspelled protocol string or just a protocol libcurl has no code for."

    Mais je ne vois pas du tout ce que cela implique, j'ai bien précisé de passer en $POST, cela signifie que mon adresse est fausse, ou les paramètres???

Discussions similaires

  1. Connecter deux sites distants
    Par David1er dans le forum Administration
    Réponses: 2
    Dernier message: 18/03/2014, 09h09
  2. [PHP 4] [PHP 4.4.1] probleme pour lire un fichier distant avec CURL
    Par seben dans le forum Langage
    Réponses: 6
    Dernier message: 27/11/2009, 08h38
  3. connection à un site distant
    Par wided_instm dans le forum Apache
    Réponses: 1
    Dernier message: 16/08/2007, 17h47
  4. equipement necessaire pour connecter 2 sites distants à l'internet
    Par didou180982 dans le forum Développement
    Réponses: 4
    Dernier message: 09/02/2007, 12h28
  5. Connexion sur site distant avec un client écrit en PERL ??
    Par Cygnus Saint dans le forum Modules
    Réponses: 2
    Dernier message: 07/03/2006, 10h45

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