simuler une requete POST [PHP/HTTP] - PHP - Programmation
Marsh Posté le 21-08-2004 à 19:42:40
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?
Marsh Posté le 21-08-2004 à 20:57:03
$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 ?
Marsh Posté le 21-08-2004 à 21:16:43
en fait dans $res il y a peut-etre plus que la reponse http finalement!
j'ai presque réussi:
Citation : |
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.
Marsh Posté le 22-08-2004 à 00:18:06
becvert a écrit : en fait dans $res il y a peut-etre plus que la reponse http finalement! |
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 : |
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
becvert a écrit : |
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 : |
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.
Marsh Posté le 22-08-2004 à 14:34:12
merci pour ton éclairage.
en effet la réponse est de même composition que la requete: entete et corps. tout simplement!
|
pascal_ a écrit : |
par contre là je n'ai pas saisi la subtilité !
et quels problèmes cela peut-il entrainer ?
Marsh Posté le 23-07-2008 à 08:30:21
Bonjour,
Comment faire pour que cette fonction marche également pour les sites externes ?
D'avance merci
Marsh Posté le 21-08-2004 à 17:39:11
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