J'y suis finalement arrivé ! La solution était bien $HTTP_RAW_POST_DATA mais il fallait ajouter une ligne dans le php.ini si l'option n'était pas activée.
Dans "Language Options", il faut qu'il y ait ceci :
always_populate_raw_post_data = 1
On ne peut pas le faire avec ini_set() car les données sont déjà postées au moment où les modifications prennent lieu...
Je récupère les données XML avec le script suivant :
<?php
// Headers
header("Content-Type: text/xml");
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
header('Cache-Control: no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
// XML output
print rawurldecode($HTTP_RAW_POST_DATA);
?>
Ceci marche sous PHP 4.2 (EasyPHP 1.6) mais je ne garantis pas que ce soit encore valable avec la 4.3.
Et puis il faut avoir accès au php.ini, ce qui exclut l'utilisation d'hébergements gratuits comme free.fr.
Je pense que je vais ajouter une source sur le site à ce sujet car c'est un problème qui ne semble pas être très documenté pour le moment...
Dean