post via HTTP_RAW_POST_DATA

Le
Etienne
Bonjour.

Pour envoyer des requètes POST en PHP j'utilise ce code.

function WsPostRequest($url, $referer, $_data)
{
// convert variables array to string:
$data = array();
while(list($n,$v) = each($_data)){
$data[] = "$n=$v";
}
$data = implode('&', $data);
// format --> test1=a&test2=b etc.

// parse the given URL
$url = parse_url($url);
if ($url['scheme'] != 'http')
return false;

// extract host and path:
$host = $url['host'];
$path = $url['path'];

// open a socket connection on port 80
$fp = fsockopen($host, 80);

// send the request headers:
fputs($fp, "POST $path HTTP/1.1");
fputs($fp, "Host: $host");
fputs($fp, "Referer: $referer");
fputs($fp, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1;
fr; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)");
fputs($fp, "Content-type: application/x-www-form-urlencoded");
fputs($fp, "Content-length: ". strlen($data) ."");
fputs($fp, "Connection: close");
fputs($fp, $data);

$result = '';
while(!feof($fp)) {
// receive the results of the request
$result .= fgets($fp, 2048);
}

// close the socket connection:
fclose($fp);

// split the result header from the content
$result = explode("", $result, 2);

$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';

// return as array:
return array($header, $content, $data);
}

que j'ai du récupérer il y a longtemps sur Internet !
Sauf qu'aujourd'hui le destinataire de mon message s'attend a trouver
les données dans

$HTTP_RAW_POST_DATA

comment je vais pour des données qui vont arriver dans
HTTP_RAW_POST_DATA ???

Merci.
Etienne.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #23844711
Bonjour,

Le 10/10/2011 11:28, Etienne a écrit :

Pour envoyer des requètes POST en PHP j'utilise ce code.

[...]

que j'ai du récupérer il y a longtemps sur Internet !
Sauf qu'aujourd'hui le destinataire de mon message s'attend a trouver
les données dans

$HTTP_RAW_POST_DATA

comment je vais pour des données qui vont arriver dans
HTTP_RAW_POST_DATA ???



Voici ce que je crois comprendre de

Si je ne me trompe pas dans la compréhension du truc, le plus simple
est de changer le code du destinataire et pas le tien. Soit il peut
changer la directive dans son php.ini pour que toutes les données POST
aillent dans $HTTP_RAW_POST_DATA, soit (méthode préférée) il lit le
flux php://input. Ou sinon, tu mets un type MIME incorrect au lieu du
type MIME correct pour qu'il ne soit pas reconnu (il va sans dire que
je ne conseille pas cette option).

Cordialement,
--
Olivier Miakinen
Etienne
Le #23844751
Le 10/10/2011 11:44, Olivier Miakinen a écrit :
Si je ne me trompe pas dans la compréhension du truc, le plus simple
est de changer le code du destinataire et pas le tien. Soit il peut
changer la directive dans son php.ini pour que toutes les données POST
aillent dans $HTTP_RAW_POST_DATA, soit (méthode préférée) il lit le
flux php://input. Ou sinon, tu mets un type MIME incorrect au lieu du
type MIME correct pour qu'il ne soit pas reconnu (il va sans dire que
je ne conseille pas cette option).



Heu ouai.
Donc en fait pas question est comment on post quelques chose de telle
façon que le PHP de l'autre coté le récupère en lisant le flux php://input.

Par exemple, je reçoit bien les messages (moi) et la donnée se trouve
dans $HTTP_RAW_POST
il n'y a rien dans $_POST, ni null par ailleurs...

le problème est que je dois générer un réponse identique.
c'est a dire que je doit renvoyer ma réponse de telle façon que le
destinataire reçoivent ça dans HTTP_RAW_POST_DATA...

Etienne
Olivier Miakinen
Le #23844781
Le 10/10/2011 11:52, Etienne a écrit :

Si je ne me trompe pas dans la compréhension du truc, le plus simple
est de changer le code du destinataire et pas le tien. Soit il peut
changer la directive dans son php.ini pour que toutes les données POST
aillent dans $HTTP_RAW_POST_DATA, soit (méthode préférée) il lit le
flux php://input. Ou sinon, tu mets un type MIME incorrect au lieu du
type MIME correct pour qu'il ne soit pas reconnu (il va sans dire que
je ne conseille pas cette option).



Heu ouai.
Donc en fait pas question est comment on post quelques chose de telle
façon que le PHP de l'autre coté le récupère en lisant le flux php://input.



Eh bien, d'après la doc déjà citée (ou en suivant les liens, par exemple
le flux php://input il aura toutes les données POSTées sans rien avoir
de spécial à faire. Il a essayé et ça ne fonctionne pas ? Sinon, pour
les trouver dans $HTTP_RAW_POST_DATA, soit il change son php.ini, soit
tu lui envoies un type MIME foireux.

Par exemple, je reçoit bien les messages (moi) et la donnée se trouve
dans $HTTP_RAW_POST



Ok. Et lui ?

il n'y a rien dans $_POST, ni null par ailleurs...



Ah. Il t'envoie un type MIME foireux ? ;-)

le problème est que je dois générer un réponse identique.
c'est a dire que je doit renvoyer ma réponse de telle façon que le
destinataire reçoivent ça dans HTTP_RAW_POST_DATA...



Bon, moi je t'en dis ce que j'ai trouvé dans la doc, hein ! Jusqu'à
ce matin j'ignorais jusqu'à l'existence de cette variable et de ce
flux.

Cordialement,
--
Olivier Miakinen
Mickaël Wolff
Le #23848331
On 10/10/11 12:10, Olivier Miakinen wrote:
Bon, moi je t'en dis ce que j'ai trouvé dans la doc, hein ! Jusqu'à
ce matin j'ignorais jusqu'à l'existence de cette variable et de ce
flux.



Moi aussi j'ai découvert ça cette semaine :D

Le plus simple pour faire des tests, c'est encore d'employer cURL en
ligne de commande.

curl http://testhost/dumper-post-in-http-body.php -X POST -d 'toto
est dans la place'

Et dans dumper-post-in-http-body.php:
== 8< = <?php
var_dump(file_get_contents('php://input'));
== 8< =
Comme ça, on peut avancer et prouver au couillon qui attend les
données que c'est lui le manchot ;)
Etienne
Le #23851921
Le 10/10/2011 22:41, Mickaël Wolff a écrit :

Ben en fait ca semble finalement assez simple.
il suffit remplacer dans le code source que j'ai filé au départ

fputs($fp, $data);

par

fputs($fp, $raw);

donc en gros ça revient a envoyer une variable post sans nom de variable.

Je suis pas sur a 100% que c'est bon, mais ca semble fonctionner.
je vais approfondir la question.

Etienne
Publicité
Poster une réponse
Anonyme