Problème de lecture du corps de la requête HTTP à partir d'un POST JSON en PHP

J'écris un script qui est enregistré comme point de terminaison pour un webhook. Je sais qu'il est enregistré avec succès parce que j'écris l'en-tête de chaque requête dans les journaux de mon serveur. Voici un exemple:

Content-Type: text/xml; charset=UTF-8
User-Agent: Jakarta Commons-HttpClient/3.1
Host: =={obfuscated}== 
Content-Length: 1918

L'API avec laquelle je me suis enregistré affiche un objet JSON dans mon script, et j'aimerais analyser cet objet en utilisant PHP. Comme vous pouvez le voir dans l'en-tête de la requête, il y a un joli gros objet JSON qui attend d'être analysé. Cela semble simple, mais cela ne l'a pas été.

À j'ai d'abord essayé d'utiliser $_POST['json'] ou simplement $_POST mais comme les données ne sont pas dans un tableau, je n'étais pas vraiment sûr de savoir comment y accéder comme ça.

J'ai essayé d'utiliser file_get_contents('php://input') et fopen('php://input', 'r') avec et sans json_decode() mais pas de chance. Je ne peux pas utiliser http_get_request_body() puisque le serveur sur lequel je suis n'a pas PECL et c'est hors de mon contrôle.

Existe-t-il d'autres moyens d'interagir avec L'objet JSON POST-ed qui me manque? Merci!

41
demandé sur Hartley Brody 2011-08-13 05:07:19

2 réponses

Merci aux autres pour l'entrée. Il s'avère que j'avais juste besoin de

$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE); //convert JSON into array

Où le deuxième paramètre de json_decode a renvoyé l'objet sous forme de tableau.

J'espère que cela aide quelqu'un d'autre!

117
répondu Hartley Brody 2016-10-07 12:03:49

Même lorsque les travaux suivants.

$inputJSON = file_get_contents('php://input');

Si vous souhaitez continuer à utiliser $_POST, envoyez les données en tant que FormData

var fd = new FormData();
fd.append('key', 'value');
return axios.post('url', fd)
0
répondu Exequiel Aguirre 2018-09-28 20:46:26