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 :

post et get par les sockets, comment ne pas récupérer les entêtes http


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Nillak
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 138
    Points : 77
    Points
    77
    Par défaut post et get par les sockets, comment ne pas récupérer les entêtes http
    Bonjour,
    j'utilise un petit script php qui me permet de simuler des requetes en post et get. je sais qu'il existe cURL mais il n'est pas installé

    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
    <html><head></head><body>
    <?php
     
     
    function post_it ($datastream, $url, $method) {
     
      $url = preg_replace("@^http://@i", "", $url);
      $host = substr($url, 0, strpos($url, "/"));
      $uri = strstr($url, "/");
     
      $reqbody = "";
      foreach($datastream as $key=>$val) {
        if (!empty($reqbody)) $reqbody.= "&";
        $reqbody.= $key."=".urlencode($val);
      }
     
      if ($method == "GET") {
        $uri .= '?' . $reqbody;
      }
      echo "<br>".$uri."<br>";
      $contentlength = strlen($reqbody);
      $reqheader =  $method . " " . $uri . " HTTP/1.1\r\n".
                    "Host: " . $host . "\n".
                    "User-Agent: PostIt\r\n".
                    "Content-Type: application/x-www-form-urlencoded\r\n".
                    "Content-Length: " . $contentlength . "\r\n".
                    "Connection: Close\r\n\r\n".
                    $reqbody . "\r\n";
     
      echo "<br>".$reqheader."<br>";
      $socket = fsockopen($host, 80, $errno, $errstr);
     
      if (!$socket) {
        $result["errno"] = $errno;
        $result["errstr"] = $errstr;
        return $result;
      }
     
      fputs($socket, $reqheader);
     
      while (!feof($socket)) {
        $result[] = fgets($socket, 4096); 
      }
     
      fclose($socket); 
     
      return $result;
    }
     
    /* ---------------------------------------------------------- */
      $VARIABLE = "BLABLABLABLA \r\n";
     
      $data["UserName"] = "some";
      $data["PassWord"] = "data";
     
      $result = post_it($data, "http://localhost/test", "GET");
     
      if (isset($result["errno"])) {
        $errno = $result["errno"];
        $errstr = $result["errstr"];
        echo "<B>Error $errno</B> $errstr";
        exit;
      } else {
          for($i=0;$i< count($result); $i++) $VARIABLE .= $result[$i];
      }
      echo $VARIABLE;
     
     
    ?>
    </body>
    </html>
    Seulement voilà j'ai deux questions (en fait) :
    - la fonction marche très bien en post et get, mais me renvoie systématique l'entête HTTP :
    HTTP/1.1 200 OK Date: Wed, 24 Jan 2007 11:52:32 GMT Server: Apache/2.2.3 (Win32) PHP/5.2.0 Content-Length: 191 Connection: close Content-Type: text/html
    y a-t-il un moyen de supprimer cela sans avoir à traiter la chaine de caractère par une quelconque fonction (que je ne connais pas encore du reste)
    - lorsque j'utilise ce script en GET, je peux quand même récupérer le résultat des variables en post, est-ce normal ??? sachant que ceci n'est pas vrai en utilisant un formulaire html et en utilisant les <form>

    J'espère que j'ai été assez clair
    Merci d'avance
    C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison ! (Pierre Desproges)

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Pour sauter les headers, tu dois lire tant que tu n'obtiends pas deux retours chariots à la suite.

  3. #3
    Membre régulier Avatar de Nillak
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Merci pour ta réponse,
    effectivement tu as raison, c'est une solution, mais en regardant le script je me suis rendu compte que si au lieu d'utiliser une boucle sur tous les éléments du tableau $result
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0;$i< count($result); $i++) $VARIABLE .= $result[$i];
    je ne récupérais que le dernier élément de ce tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $VARIABLE .= $result[count($result)-1];
    ça marchait nickel.

    qu'en penses-tu, y a-t-il une astuce qui m'échapperait et qui pourrait resortir un jour ou l'autre ?
    C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison ! (Pierre Desproges)

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Si tu reçois des headers, ce n'est pas pour rien. Je pense qu'il est intéressant de regarder ce qu'ils contiennent. Notamment le statut : 200 OK
    Imagine tu te choppes un 404 Not found ou 500 Internal server error.... Le reste de ton script sera foireux...

    Et peut-être qu'un jour le résultat ne tiendra pas sur 1 ligne mais sur 10... Tu devra alors modifier ton count($result) - 1, pas dramatique en soi, mais si tu sautais proprement tes headers, tu n'aurais pas besoin de modifier le code....

    Enfin je dis ça je dis rien

  5. #5
    Membre régulier Avatar de Nillak
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    bon, dis comme ça , du coup j'ai fait autrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        for($i=0;$i< count($result); $i++) $VARIABLE.= $result[$i];
        $result = strstr($VARIABLE, "\r\n\r\n");
    et voilà ! (en espérant que ce soit suffisant)
    C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison ! (Pierre Desproges)

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    J'ai rien compris à ta solution, mais bon, si ça te convient...

  7. #7
    Membre régulier Avatar de Nillak
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    alors juste pour info j'ai remplacé le bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    else {
          for($i=0;$i< count($result); $i++) $VARIABLE .= $result[$i];
      }
      echo $VARIABLE;
    ...
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
      else {
        for($i=0;$i< count($result); $i++) $VARIABLE.= $result[$i];
        $result = strstr($VARIABLE, "\r\n\r\n");
      }
      echo $result;
    ...
    le but de la fonction strstr() :

    string strstr ( string haystack , string needle )
    strstr retourne une sous-chaîne de haystack , allant de la première occurrence de needle jusqu'à la fin de la chaîne.
    Si needle est introuvable, strstr retourne FALSE .
    Si needle n'est pas une chaîne, elle sera convertie en entier, et utilisée comme code ascii du caractère correspondant.
    Il faut biensur que je test que le retour n'est pas FALSE, mais disons que je suis toujours en phase de développement

    J'espère que j'ai été plus clair
    C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison ! (Pierre Desproges)

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    ok

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

Discussions similaires

  1. comment ne pas afficher les donnees transmis par un lien
    Par coucam dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 04/07/2007, 14h39
  2. Comment ne pas voir les alertes de Access ?
    Par kaptnkill dans le forum Access
    Réponses: 6
    Dernier message: 12/07/2006, 16h49
  3. [MySQL] [SQLyog] comment ne pas trier les attributs sur 1 PK
    Par raoulmania dans le forum Installation
    Réponses: 11
    Dernier message: 19/12/2005, 16h30
  4. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01
  5. [][Excel] Comment ne pas détruire les formules ?
    Par flyangelNext dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/07/2003, 11h38

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