Version complète: sur le forum Webmaster Hub : récupérer variables passées en POST grâce à fsockopen
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
cvmh
Bonjour

Je teste la fonction fsockopen gràce à un fichier d'appel :
CODE
$POST_DATA='variable=44&truc=12';
$HTTP_REQUEST="POST http://www.monsite.com/http-request-reponse.php HTTP/1.1\n";
$HTTP_REQUEST.="Host: monsite.com\n";
$HTTP_REQUEST.='Connection: close Accept-Encoding: gzip Content-Type: application/x-www-form-urlencoded Content-Length: '.strlen($POST_DATA)."\n\n";
$HTTP_REQUEST.=$POST_DATA;

$fp=fsockopen($host,'80',$errno,$errstr);
if($fp)
{
fwrite($fp,$HTTP_REQUEST);
$response='';
while(!feof($fp))
{
$response.=fread($fp,4056);
}
fclose($fp);
echo "RESULTAT :".$response;//Output à traiter un minimum.
}
else
{
echo "Erreur:".$errno.':'.$errstr;
}


Et de l'autre côté, mon fichier appelé :
CODE
echo 'OK - recu en post : '.$_POST['variable'];
echo '<br><br>fin fichier


Au final, lorsque je lance le script d'appel, je n'ai pas d'erreur mais on dirait que le fichier appelé n'arrive pas à récupérer les variables que je lui passe en POST. En effet, voici le retour :
CITATION
RESULTAT :HTTP/1.1 200 OK Date: Tue, 10 Jun 2008 07:27:34 GMT Server: Apache/1.3.37 (Unix) mod_gzip/1.3.19.1a PHP/5.1.6 mod_ssl/2.8.28 OpenSSL/0.9.6m X-Powered-By: PHP/5.1.6 Connection: close Transfer-Encoding: chunked Content-Type: text/html 31 OK - recu en post :

fin fichier 0


Comment se fait-il que je ne récupère pas mes variables en POST ? J'ai essayé la même chose en GET mais même souci.
Si vous aviez une piste, merci d'avance !!


EDIT : en modifiant dans le fichier d'appel
$HTTP_REQUEST="POST http://www.monsite.com/http-request-reponse.php HTTP/1.1\n";
par
$HTTP_REQUEST="POST http://www.monsite.com/http-request-repons...=44&truc=12 HTTP/1.1\n";
Cela fonctionne : je récupère mes données en GET
Mais est-ce que ça ne pose pas de pb au niveau sécurité ?
Kioob
Hello,

en théorie la requête POST à envoyer est POST /http-request-reponse.php et non l'URL complète (d'où l'entête avec Host: monsite.com) ; je suppose que ça joue sur le résultat.
De plus, il manque plein de retours chariot dans cette ligne :
CODE
$HTTP_REQUEST.='Connection: close Accept-Encoding: gzip Content-Type: application/x-www-form-urlencoded Content-Length: '.strlen($POST_DATA)."\n\n";


Et pour débugger plus facilement dans ton script de test tu devrais peut-être faire un var_dump( $_POST ) pour voir exactement le contenu du tableau, non ?

Sinon dans l'élan, je te déconseille d'envoyer l'entête Accept-Encoding: gzip : si ton serveur gérait la compression, tu te retrouverais avec un contenu difficile à traiter, surtout avec la version 1.1 d'HTTP.

EDIT : pour l'aspect sécurité, tout dépend du script en question. Si cela déclenche un traitement faisant des modifications, oui, il vaut mieux le laisser en POST pour éviter les "injections XSS".
Mais mis à part ce cas, ça ne change rien non, la méthode POST n'apportant guère plus de sécurité que la méthode GET.
cvmh
Merci pour ta réponse.
Je préfèrerais passer en post car en GET je vais être limité à 250caractères dans l'url et j'ai de nombreux paramètres à passer.

J'ai mis en place les modifications que tu évoques mais sans succès. Je ne comprends pas, ce n'est pourtant pas compliqué... Merci en tout cas de ton implication, n'hésite pas si tu as d'autres suggestions smile.gif
Kioob
Fais voir ta "mise en place" alors stp tongue.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.