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 :

Envois de données POST sans formulaire - Curl [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 22
    Points
    22
    Par défaut Envois de données POST sans formulaire - Curl
    Bonjour à tous,

    J'ai déja posté un post similaire sur PHP-symfony mais en fait je me rends compte que le problème que j'ai est plus général.

    Je dois dans le cadre d'un projet envoyer en PHP une variable contenant une structure XML et cela sans formulaire évidement mais à l'intérieur d'un script.

    Soyons plus concret c est un web service qui me demande des données via un XML contenu dans une variable et qui me donnera une réponse.

    En sois je pensais vraiment cela banal mais je remarque que finalement c est assez galère. (du moins de mon point de vue). l'envoi doit se faire en Post.

    j'ai exploré plusieurs pistes et je viens d'essayer Curl.

    ma variable $myxml contient un XML que j'ai crée cependant j'obtiens une réponse du web service qui me dit de vérifier mon XML. (ce que j'ai deja fais)

    ... y a t il un moyen de savoir ce que j'envoie ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $url = "http://www.example.com";
    $ch = curl_init();    // initialize curl handle
    curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
    curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s
    curl_setopt($ch, CURLOPT_POST, 1); // set POST method
    curl_setopt($ch, CURLOPT_POSTFIELDS, "xmlContent=$myxml"); // add POST fields
    $this->result = curl_exec($ch); // run the whole process
    curl_close($ch);


    Bien à vous
    Phoelis

  2. #2
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut
    Bonjour,

    Peut être fais-je erreur mais envoyer des données en post sans formulaire est tout a fait possible sans module php accessoire grâce aux header.

    Un petit exemple trouve sur le net en 30s :

    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
        <?
        // Les données envoyées en POST sous forme d'url
        $data = 'txt1='.urlencode($txt1).'&txt2='.urlencode($txt2).'&id='.$id_session;
     
        // monfichier.php3 est l'URL du fichier devant recevoir la requete POST  
        $message  = "POST /monfichier.php3 HTTP/1.0\r\n";
        $message .= "Content-type: application/x-www-form-urlencoded\r\n";
        $message .= "Content-length: ".strlen( $data )."\r\n";
        $message .= "\r\n";
       $message .= $data."\r\n";
     
       // monserveur correspond au serveur qui doit recevoir la requete
       $fd = fsockopen( "monserveur", 80 );
       fputs($fd,$message);
       fclose($fd);
       ?>
    Spécialité : Développement WEB
    Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords ~ PHP-Tester


  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Bonjour Keaton,

    Merci pour ta réponse.

    J'avais essayé la fonction 'fsockopen' mais il me retournait une erreur comme quoi il ne trouvait pas l'adresse.
    (php_network_getaddresses: getaddrinfo failed: No such host is known)

    Or l'adresse fonctionne et réponds bien (étant donné qu'avec Curl je reçois une réponse).

    Phoelis

  4. #4
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut
    Tu as correctement rentre l'adresse de ton serveur ?
    Spécialité : Développement WEB
    Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords ~ PHP-Tester


  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Encore merci Keaton,

    en effet il y avait deja une erreur dans mon adresse host car j'y incluais mon répertoire /monfichier.jpg :-)

    Après avoir résolu cela je me suis trouvé avec une 403 permission denied.

    j'ai rajouté

    $message .= "Host: www.monexemple.com\r\n";

    et cela fonctionne je passe :-)

    J'ai la meme erreur , vérifier votre XML ! donc le serveur me réponds !

    Maintenant je dois comprendre pourquoi dans la variable $myxml que j'envoie je perds les majuscule et la premiere ligne...
    <?xml version='1.0' encoding='UTF-8' ?> --> me rends compte que <? ?> ce sont des tags PHP :-)

    merci beaucoup Keaton pour ton intervention
    Phoelis

  6. #6
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut
    oui il y a confusion avec les <? simples. Le bug est frequent avec la fonction eval par exemple qui autorise l'execution de script dans une chaine.

    Il faut désactiver les short_open_tags pour ne plus avoir ce soucis.
    Spécialité : Développement WEB
    Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords ~ PHP-Tester


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

Discussions similaires

  1. Envoi de requête HTTP POST sans formulaire
    Par youpitralala dans le forum Langage
    Réponses: 3
    Dernier message: 02/09/2009, 17h57
  2. Passage de données en POST sans formulaire
    Par juliotte dans le forum Langage
    Réponses: 7
    Dernier message: 17/09/2007, 13h18
  3. Envoi de POST sans formulaire
    Par jpean.net dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 18h00
  4. Envoyer des données par post sans formulaire
    Par webrider dans le forum Langage
    Réponses: 12
    Dernier message: 31/03/2007, 19h11

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