Maison >développement back-end >tutoriel php >Comment puis-je lire correctement les données JSON POST en PHP ?

Comment puis-je lire correctement les données JSON POST en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 19:39:15937parcourir

How Can I Properly Read JSON POST Data in PHP?

Lecture de JSON POST à ​​l'aide de PHP

Lorsque vous travaillez avec des services Web qui nécessitent la publication de données au format JSON, il est essentiel de gérer correctement les valeurs POST en PHP. Cet article vous guidera à travers les étapes pour lire et analyser efficacement les données JSON POST.

Problème : valeurs $_POST vides avec le type de contenu Application/JSON

Si vous rencontrez des problèmes avec des $ vides. _POST malgré la spécification de application/json comme Content-Type, cela est probablement dû à la façon dont vous filtrez les valeurs de publication. Dans ce cas, la variable classique $_POST n'est pas adaptée à la lecture de données au format JSON.

Solution : Lire JSON avec file_get_contents('php://input')

Pour accéder au brut Données JSON POST, vous devez utiliser file_get_contents('php://input'). Cette fonction lit le flux d'entrée du script actuel et renvoie le corps brut de la requête HTTP.

Code PHP mis à jour du côté récepteur :

$json = file_get_contents('php://input');
$obj = json_decode($json);

Gestion des données POST Correctement pendant les tests

Lorsque vous testez votre service Web, il est crucial de vous assurer que les données POST sont envoyées dans le bon format. Dans votre code de test :

  • Utilisez json_encode($data) pour convertir les données en chaîne JSON.
  • Spécifiez le type de contenu comme application/json dans l'en-tête HTTP.

Test mis à jour code :

$data_string = json_encode($data);

$ch = curl_init('http://webservice.local/');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string))
);

$result = curl_exec($ch);
$result = json_decode($result);

Remarque sur la configuration de l'en-tête

Assurez-vous que l'en-tête('Content-type: application/json') n'est appelé qu'une seule fois du côté récepteur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn