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 :

[cURL] Tester le temps de la dernière requête avec cURL


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut [cURL] Tester le temps de la dernière requête avec cURL
    Boinjour,

    je fais des requêtes à un serveur avec curl.

    je fais une requête pour m'authentifier, et je voudrais le faire seulement toutes les 10 minutes.

    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
     
     $ch = curl_init();
     
      curl_setopt($ch, CURLOPT_URL,$url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_TIMEOUT, 4);
      curl_setopt($ch, CURLOPT_COOKIEJAR, "\tmp\cookie.txt");
      curl_setopt($ch, CURLOPT_COOKIEFILE, "\tmp\cookie.txt");	
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     
    $data = curl_exec($ch);
      #print_r $data;
      if (curl_errno($ch)) {
        print curl_error($ch);
        return false;
      }
     
     return $ch;
    avant de faire le curl_exec, je dois regarder depuis combien de temps la derniere requete a été effectuée.
    Si ca fait moins de 10 minutes, récuperer $ch ( CURL Handle authenticated ) pour l'utiliser dans une autre requete.

    Quelqu'un pour m'aider?

    merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Si ton script est relancé à chaque fois, tu perds tous tes pointeurs de ressources. Mais pourquoi ne pas simplement réinjecter le cookie de session/authentification avec CURLOPT_COOKIEFILE.

    Pour le timestamp, c'est relativement simple, tu le mets en bdd ou en fichier plat et tu le relis à chaque fois que tu veux exécuter le script.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    tu veux dire je teste si le temps est inferieur à 10min, je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     curl_setopt($ch, CURLOPT_COOKIEFILE, "\tmp\cookie.txt");
    et ca me récuperera mon cookie d'authentification?

  4. #4
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    Il n'y a pas un autre moyen que de créer un timestamp dans un bdd.?
    une info dans le cookie qui nous donnerai la date de création par exemple

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Si tu veux récupérer un pointeur de ressource plus loin dans un script, c'est possible, bien sûr. Mais si le script est exécuté à nouveau, tous les pointeurs de ressources seront automatiquement fermés quand le premier script s'arrêtera.

    A ma connaissance il n'y a pas de connections persistante pour ce type de ressource.
    http://be2.php.net/manual/fr/resource.php

    Pour le timestamp la fonction curl_getinfo() ne contient que des données de durée (connexion et transaction). Pas l'heure de la connexion.

    Pourrais-tu expliquer le pourquoi de ta demande. Gain de temps? Prolongation d'une session?

    Citation Envoyé par brasco06
    Il n'y a pas un autre moyen que de créer un timestamp dans un bdd.?
    une info dans le cookie qui nous donnerai la date de création par exemple
    Si, dans un fichier plat (ou en session ce qui revient au même).

  6. #6
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    c'est pour un gain de temps oui.

    le but est de s'authentifier au serveur une fois, de pouvoir effectuer des requêtes sans se ré-authentifier (pour eviter de faire 2 requetes à chaque fois).

    Et de faire une authentification automatique selon un temps prédéfini.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    je vais récapituler:

    je m'identifie a un serveur:

    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
     $ch = curl_init();
     
      curl_setopt($ch, CURLOPT_URL,$url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_TIMEOUT, 4);   
     curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
     curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     
      $data = curl_exec($ch);
     
      if (curl_errno($ch)) {
        print curl_error($ch);
        return false;
      }
     
     
      preg_match("(\d*)", $data, $matches);
      $resp_code = $matches[0];
     
      if ( $resp_code != 100 && $resp_code != 301) {
        //error( "Response: Authentication Failed: $resp_code");
        return false;
      }
     
      return $ch;

    ensuite pour effectuer de nouvelle requete a ce serveur, j'ai besoin de recupérere la ressource $ch .

    Pour éviter d'appeler une methode d'authentification à chaque fois.

    Apres dans une methode "send_query", je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    curl_setopt($ch, CURLOPT_URL,$url);
    $data = curl_exec($ch);
     
    if (curl_errno($ch)) {
    	  print curl_error($ch);
             return false;
    }
     
    return $data;
    Le but est donc de retourner la ressource $ch sans re appeler la methode d'authentification.

    j'espère avoir été plus clair.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    A première vue il ne s'agit pas d'une authentification http mais plutôt par cookie. Essaye, comme suggéré plus haut de réinjecter le cookie capturé lors de la première connexion.

    Ton script send_query:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    curl_setopt($ch, CURLOPT_URL,$url);
     
    // réinjection du cookie.
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
     
    $data = curl_exec($ch);
     
    if (curl_errno($ch)) {
    	  print curl_error($ch);
             return false;
    }
     
    return $data;

  9. #9
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    merci pour ton aide.

    j'avais deja essayé ca mais ca m renvoi une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt(): supplied argument is not a valid cURL handle resource in
    pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIE);
    Il veut une ressource $ch, mais ne l'a pas dans send_query;

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Tu dois évidemment rouvrir une ressource (curl_setopt($ch, CURLOPT_URL,$url), mais sans capturer le cookie (pas de CURLOPT_COOKIEJAR).

    Sans pointeur de ressources ça ne risque pas de marcher!

    As-tu la main sur le serveur cible? Sinon, les techniques d'indentifications des sites sont parfois très ténébreuses. Il n'y a pas de recette miracle. Par exemple, hotmail n'offre pas d'accès POP, dès lors certains ont essayé d'utiliser CURL (ou wget) pour accéder à leur mail. Pas évident apparemment. Il faut utiliser un anayleur de trames (Etheral, tcpdump) pour décortiquer le contenu de toutes les entêtes de redirection et cookies envoyés par hotmail et d'ensuite les "replay" avec CURL. Pas si simple.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    je le fais bien ( voir 2 posts plus haut)!!
    je re ouvre une ressource!

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Pour ouvrir une ressource CURL, tu dois faire:

  13. #13
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    oui mais en faisant ca, je perds ma 1ere ressource, et donc ce n'est plus la meme session non?

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    J'essaye de te comprendre. Tu veux accéder à un site et y lancer un script après t'être identifié. L'identification CURL se passe toujours en deux temps:
    • Tu captures le cookie envoyé par la page d'identification:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      curl_setopt($ch, CURLOPT_COOKIEJAR, "\tmp\cookie.txt");
    • à chaque nouvelle demande de page dans le même script ou dans un autre, tu réinjectes le cookie avec
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      curl_setopt($ch, CURLOPT_COOKIEFILE, "\tmp\cookie.txt");
    • Le code que tu mets plus haut fait le tout en une seule étape en suivant la redirection envoyée par le site, juste après le cookie. C'est la fonction de l'option CURLOPT_FOLLOWLOCATION.


    Il faut bien comprendre la logique des échanges d'entêtes http entre le site et le client (ici CURL). Ensuite, il faut procéder par essais-erreurs pour arriver à tes fins. Ainsi que lire la doc et d'essayer, "à blanc", les exemples de la doc.

    Je suppose que tu n'as pas la main sur la cible et que tu essayes de court-circuiter les pages d'indentification pour accéder à une page ou script particulier. Rien de mal à cela mais si la cible est un site qui n'aime pas les bots, tu peux t'attendre à une bonne défense. CURL est l'outil préféré des robots.

    Si, par contre il s'agit d'un simple site avec une authentification de base, c'est jouable.

    Pour t'aider dans ton déboguage, affiche les headers reçus (CURLOPT_HEADER) et analyse-les.

  15. #15
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    j'ai acces au serveur cible, car c'est pour un stage.
    Le serveur appartient à mon entreprise.


    j'ai du mal a comprendre ce systeme de cookie en effet !

  16. #16
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    bonjour,

    j'ai réussi en capturant une 1ere fois le cookie et en le ré injectant avec toutes les options de transfert.

    J'ai un petit probleme.

    Est-ce que je peux choisir le chemin de mon cookie?

    car par défaut il se créer a la racine de apache.

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Tu y mets le chemin que tu veux avec, toutefois, la limitation définie dans open_basedir du php.ini.

    Certaines versions de PHP/CURL passent au travers de cette limitation mais chuuut il ne faut le dire à personne!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] fonction de tester le temps d'une date
    Par Invité dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/07/2013, 13h07
  2. Multiple curl en même temps
    Par JayGr dans le forum Langage
    Réponses: 7
    Dernier message: 30/05/2013, 12h47
  3. [curl] question si temps max
    Par Merfolk dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2009, 09h39
  4. Script shell pour tester le temps de réponse d'Apache
    Par Joe Le Mort dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 16/07/2007, 21h14
  5. [cURL] Gérer le proxy avec curl
    Par DaSoul dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/03/2006, 23h18

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