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 :

PHP & CURL


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut PHP & CURL
    Hello Hello,

    Je voudrais poster envoyer un POST auromatiquement en utilsant PHP/ Curl.
    Le probleme est que dans le formulaire se trouve une cle cachee (variable hidden) qui est automatiquement generee et donc change a chaque fois.

    Je peux facilement recupere la cle mais le probleme c'est que je ne sais pas comment reutiliser le meme formulaire sans recharger la page, et donc la cle change.

    Mon code:

    Ici je recupere la page:
    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
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_URL, $url_connexion);
    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');
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_COOKIESESSION, 0); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $url_cookie);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $url_cookie);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     
     
    $contenu = curl_exec($ch);
    ensuite je bidouille pour recupere la cle sur $contenu avec une expression reguliere ou meme un explode. Je cale tous mes variable de champs dans postfield.

    et je veux poster enfin le formulaire.. (Mais bien sur, HIC, ca recherge un nouveau formulaire et la cle change):

    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_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    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');
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_COOKIESESSION, 0); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $url_cookie);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $url_cookie);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch,CURLOPT_PUT,1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields_log);
    $contenu = curl_exec($ch);
    Merci pour votre aide. D'habitude je recherche toujours ma reponse sur le forum ou le net, mais la.. le sujet a apparement ete rarement traite..

    A+,

    Pierre

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Tu poste bien sur l'url de l'action du formulaire ? as-tu regardé si il y avait
    pas des cookies en jeux ? cookie de session par exemple.

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci marcha,

    Oui session tout ca c'est ok.
    C'est vraiment un champs cachee qui est generee automatiquement dans le formulaire. Je recupere cette cle facilement. Mais je ne sais pas comment ne pas envoyer le formulaire sans recharger la page. (ce qui change la champs cache). Cf plus haut.

    Des idees?

    Merci,

    Pierre

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Je comprends pas bien ton problème, ce que j'ai compris c'est que tu
    charge d'abord une page avec un formulaire et un champ caché que
    tu extrait, puis tu simule la requête de soumission du formulaire à
    l'identique que si tu le faisait depuis ton navigateur et qu'au lieu de passer
    à l'étape suivante, il te redonne la page de formulaire.

    Si tel est le cas, je pense qu'il manque quelque chose et que le script
    détecte une anomalie et te retourne la page de formulaire.

    Dans ce cas je m'assurerai de quelques points:

    1) Je tracerait les requêtes faites en mode "humain", avec FireFox/FireBug onglet
    Réseau (Net), tu observes tous les en-têtes http en jeux.

    2) Je respecterait l'ordre des champs (on ne sait jamais)

    3) J'essaierai aussi de temporiser la requête, c'est à dire, attendre quelques
    secondes entre le rendu du formulaire et son envoi (on ne sait jamais, le
    script test peut-être que c'est pas un robot en estimant qu'un utilisateur
    ne peut pas raisonnablement remplir le formulaire en moins d'une seconde)

    Sinon, si cette page est accessible sur le net je veux bien y jeter un coup d'œil.

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Hello Marcha,

    Merci de te pencher sur mon probleme...

    Je vais essayer de suivre tes conseils pour voir, temporiser la requette, mettre dans le meme ordre. Cependant je suis sur que c'est parce qu'il recharge la page.

    Je m'explique en plus precis:

    la page avec le formulaire contient un (ou plusieurs) champs hidden generee automatiquement et qui change tout le temps: Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="CLE" value="xrstsuso">
    J'imagine qu'e la fonction qui gere les donnees recues, va verifier le code.

    Le probleme. c'est qu'avec ma fonction curl, je recharge la page. Donc je recupere "xrstsuso", mais ce n'est plus la bonne cle.
    Et ca plante.

    Ca ne passe pas a un autre formulaire ou autre. SInon je recupererais facilement ces cles...

    Merci,

    Pierre.

  6. #6
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    :-) je m'excuse mais je comprends pas tout :-)

    Tu as bien une première requête qui charge le formulaire, par ex: form.html
    puis tu traite ton champs caché puis tu crée une deuxième requête, par
    exemple: script.php ? et c'est là que tu reçoit le formulaire à nouveau ?
    comme si tu étais sur le premier url (form.html) ?

    Tu peux donner le code html généré par "form.html" stp ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bon je te donne le l'adresse du formulaire en question:

    https://post.craigslist.org/sha/H/roo/none/x

    Je le redis, ca me recharge pas de formulaire.
    Ca vient juste verifier que la cle cache est correcte.

    Mais le probleme avec mon code, c'est que CURL recaharge la page.

    Par exemple si j'irais sur le site moi meme, je remplirais le formulaire, je poste, et Firefox envoie mes reponse avec la cle cachee correcte.

    Ce que fais CURL avec mon script:
    Il telecharge la page du formulaire. Trouve la cle cache automatiquement.
    RECHARGE la page et poste automatiquement les reponse + l'ancienne cle.


    Moi je ne veux pas qu'il RECHARGE LA PAGE... C'est con, mais je buche la dessus depuis deux semaines.

    PS: j'ai deja utiliser CURL avec succes pour d'autre sites. Mais celui la a cet obstacle insurmontable..

    Merci pour tes efforts ;-) ;-)

    Pierre

  8. #8
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Je viens de regarder la page en question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <form action="/sha/H/roo/none/x/UTEIfiVosK23iDCm/h7fyd" method="post" enctype="multipart/form-data">
    <input type="hidden" name="postingKey" value="UTEIfiVosK23iDCm">
    Tu as remarqué que la clé est présente à deux endroits ? une fois
    dans l'url de form action et une fois en tant que champ caché ?

    D'autre part le enctype est en multipart, ça peut jouer un rôle.

    Est-ce que tu as pas oublié de refaire un $ch = curl_init(); avant la 2ème
    requête ?

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Hourra je viens de trouver...

    Je cherchais la cle sur la page du formulaire et je repostais sur cette meme page.

    En fait j'aurais du chercher la cle sur la page du formulaire mais poster a l'adresse de <form action="...">

    C'etais tout con..

    Et c'est vrai que je m'obstinais a pense que Curl rechargeais la page inutilement...

    Merci pour l'aide.

    A+,

    Pierre.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/09/2010, 21h17
  2. [cURL] Multithreading en PHP avec Curl
    Par messier79 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/09/2008, 14h55
  3. [PHP-JS] Curl et PHP
    Par yongblood dans le forum Langage
    Réponses: 7
    Dernier message: 13/01/2007, 19h30
  4. [XML] [cURL] Authentification Php récupération de données
    Par thibaut06 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/02/2006, 14h23

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