Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1045 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/HTTP] simuler une requete POST

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/HTTP] simuler une requete POST

n°828470
becvert
Posté le 21-08-2004 à 17:39:11  profilanswer
 

voici le script :


function sendToHost($url,$data){  
  $url=parse_url($url);  
  $fp = fsockopen($url['host'], 80);  
  $mess=
    "POST ".$url['path']." HTTP/1.0\r\n".
    "Host: ".$url['host']."\r\n".  
    "Content-Type: application/x-www-form-urlencoded\r\n".
    "Content-Length: " . strlen($data) . "\r\n".          
    "\r\n".
    $data."\r\n";
  fputs($fp, $mess);    
  $buf="";
  while (!feof($fp)) {
      $buf .= fgets($fp,128);
  }  
  fclose($fp);
  return $buf;
}
 
$res=sendToHost('http://localhost/admin/index.php','edit=3');
header("Location: http://localhost/admin/index.php" );  
exit();

 
 
cette requete est sensé envoyé la variable edit égale à 3.
elle semble correcte puisque le code retour obtenu dans $res
est '200'.
mon probleme est que je ne peux pas récupérer la variable dans $HTTP_POST_VARS["edit"].
Je me demande si le corps de la requête a été soumis et bien reçu.
ne faudrait-il un code retour retour de '201' qui signifie qu'une ressource a été crée sur le serveur.
merci


Message édité par becvert le 21-08-2004 à 21:44:59
mood
Publicité
Posté le 21-08-2004 à 17:39:11  profilanswer
 

n°828556
pascal_
Posté le 21-08-2004 à 19:42:40  profilanswer
 

Normalement si j'ai bien compris, dans ton $res, tu dois avoir le code html de la page pour un poste de edit=3 dans cette page. C'est le cas ?
 
Il te sert à quoi ton header ?
C'est pas en faisant header que tu essayes de  voir si $HTTP_POST_VARS["edit"] est fixé par hasard?

n°828583
becvert
Posté le 21-08-2004 à 20:57:03  profilanswer
 

$res c'est simplement la reponse http du serveur. il ne s'agit pas de code html. dans ce cas précis voici à quoi c'est égal:
"HTTP/1.1 200 OK Date: Sat, 21 Aug 2004 18:47:46 GMT Server: Apache/1.3.27 (Win32) PHP/4.3.3 X-Powered-By: PHP/4.3.3 Connection: close Content-Type: text/html"
 
je veux simuler le submit d'un formulaire avec methode POST.
pour ça j'envoie la requete POST qui est sensée passer la variable edit au serveur, puis je dirige le navigateur grace à header() vers le script à executer et qui reçoit la variable.
 
est-ce plus clair ?

n°828591
becvert
Posté le 21-08-2004 à 21:16:43  profilanswer
 

en fait dans $res il y a peut-etre plus que la reponse http finalement!
j'ai presque réussi:
 

Citation :


function sendToHost($url,$data){
    global $admin_session, $admin_level;    
    $url=parse_url($url);    
    $fp = fsockopen($url['host'], 80);  
    $mess=
      "POST ".$url['path']." HTTP/1.0\r\n".
      "Host: ".$url['host']."\r\n".  
      "Content-Type: application/x-www-form-urlencoded\r\n".
      "Content-Length: " . strlen($data) . "\r\n".  
      "Cookie: admin_session=".$admin_session.";admin_level=".$admin_level."\r\n".        
      "\r\n".
      $data."\r\n";
    fputs($fp, $mess);    
    for($i=0;$i<6;$i++){ $response=fgets($fp,128); }
    $buf="";
    while (!feof($fp)) {
      $buf .= fgets($fp,128);
    }  
    fclose($fp);
    return $buf;
  }
 
   
   $res=sendToHost('http://localhost/admin/index.php','edit=3');
echo $res;
exit();

 
 
 
j'ai abandonné la redirection par header().
je fais echo sur $res.
la variable est bien récupéré par mon script.
par contre j'ai toujours en haut de la page la reponse http
"HTTP/1.1 200 OK Date: Sat, 21 Aug 2004......."
edit: en vert pour purger l'entete de la reponse. marche pour mon cas attention au débordement pour un autre cas peut-etre !
et je suis obligé de passer "manuellement" les variables de sessions
par l'en-entete cookie
 
 
j'avoue que quelquechose m'échappe dans la subtilité des échanges http.


Message édité par becvert le 21-08-2004 à 23:44:30
n°828629
pascal_
Posté le 22-08-2004 à 00:18:06  profilanswer
 

becvert a écrit :

en fait dans $res il y a peut-etre plus que la reponse http finalement!
j'ai presque réussi:


 
Non c'est juste la répondse http, mais qui se décompose en une entête et un corps (partie html).
 

becvert a écrit :


j'ai abandonné la redirection par header().


 
C'est ce que j'avais cru comprendre, tu croyais envoyer un post et récupérer la page avec un header, mais ça ne pouvais pas marcher comme ça :D  
 

becvert a écrit :


edit: en vert pour purger l'entete de la reponse. marche pour mon cas attention au débordement pour un autre cas peut-etre !
 
j'avoue que quelquechose m'échappe dans la subtilité des échanges http.

 
 
En fait, la limite entête-corps est délimitée par une ligne vide. Voir http://www.commentcamarche.net/internet/http.php3 , http://www2.univ-reunion.fr/~jclai [...] nse10.html ou encore http://www.salemioche.com/http/http_art4.php . N'oublie pas que google est ton ami...
 
 

becvert a écrit :


et je suis obligé de passer "manuellement" les variables de sessions
par l'en-entete cookie

 
 
Ben c'est un peu normal. D'habitude c'est le navigateur qui le fait. Comme tu fais une "sorte de navigateur", c'est à toi de le gérer. Je te rappelle que ta session va être différente si tu utilises un navigateur et ton script. Le serveur va vous considérer comme deux clients différents.

n°828904
becvert
Posté le 22-08-2004 à 14:34:12  profilanswer
 

merci pour ton éclairage.
en effet la réponse est de même composition que la requete: entete et corps. tout simplement!
 


function PostToHost($url,$data){
  //simule une requete POST HTTP
  global $HTTP_COOKIE_VARS;  
  $url=parse_url($url);    
  $fp = fsockopen($url['host'], 80);  
  $request=
      "POST ".$url['path']." HTTP/1.0\r\n".
      "Host: ".$url['host']."\r\n".  
      "Content-Type: application/x-www-form-urlencoded\r\n".
      "Content-Length: " . strlen($data) . "\r\n";
  if(isset($HTTP_COOKIE_VARS)){
    $request.="Cookie: ";
    foreach ($HTTP_COOKIE_VARS as $var => $val){
      $request.=$var."=".$val.";";
    }  
    $request.="\r\n";
  }  
  $request.= "\r\n".$data."\r\n";  
  fputs($fp, $request);
  $header="";
  while ($header!="\r\n" ) $header=fgets($fp,128);
  $body="";
  while (!feof($fp)) {
    $body .= fgets($fp,128);
  }  
  fclose($fp);
  echo $body;
}


 
 
 
 

pascal_ a écrit :


Ben c'est un peu normal. D'habitude c'est le navigateur qui le fait. Comme tu fais une "sorte de navigateur", c'est à toi de le gérer. Je te rappelle que ta session va être différente si tu utilises un navigateur et ton script. Le serveur va vous considérer comme deux clients différents.

   
 
par contre là je n'ai pas saisi la subtilité !
et quels problèmes cela peut-il entrainer ?
 

n°1763525
snike
Posté le 23-07-2008 à 08:30:21  profilanswer
 

Bonjour,
 
  Comment faire pour que cette fonction marche également pour les sites externes ?
 
D'avance merci


---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/HTTP] simuler une requete POST

 

Sujets relatifs
html en phpEnvoi auto en POST ?
Un variable dans le resultat d'une requete SQL[Beaucoup de blabla pour rien : post à effacer] Compiler .bat
Incrémenter / Décrémenter des bases Mysql entres elles en PHPUpload en php
[php]Image de protection contre les spam bots [résolu][PHP] BBCode vers html problème avec <br>
PHP recuperer les dimensions d'un tableau en HTML[PHP] erreur que je ne comprend pas
Plus de sujets relatifs à : [PHP/HTTP] simuler une requete POST


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR