web-dev-qa-db-fra.com

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

J'écris un script qui est enregistré en tant que point final pour un Webhook. Je sais qu'il a été enregistré avec succès car j'écris l'en-tête de chaque demande 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 inscrit est un objet JSON POST-ing à mon script, et j'aimerais analyser cet objet à l'aide de PHP. Comme vous pouvez le constater à partir de l'en-tête de la requête, un objet JSON très volumineux et volumineux attend d'être analysé. Cela semble simple, mais ça ne l’a pas été. 

Au début, j'ai essayé d'utiliser $_POST['json'] ou simplement $_POST, mais comme les données ne sont pas dans un tableau, je ne savais pas vraiment comment y accéder de cette manière.

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() car le serveur sur lequel je suis installé ne possède pas PECL et cela échappe à mon contrôle.

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

43
Hartley Brody

Merci aux autres pour leur contribution. Il s'avère que j'avais juste besoin

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

où le deuxième paramètre dans json_decode a retourné l'objet sous forme de tableau.

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

123
Hartley Brody

Même quand ce qui suit fonctionne. 

$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
Exequiel Aguirre