Maison  >  Article  >  développement back-end  >  PHP implémente l'envoi et la réception de requêtes JSON

PHP implémente l'envoi et la réception de requêtes JSON

不言
不言original
2018-06-07 09:56:233664parcourir

Cet article partage avec vous les méthodes détaillées et des exemples de codes pour envoyer et recevoir des requêtes JSON en PHP. Les amis intéressés peuvent s'y référer.

Dans les microservices actuels, de nombreuses API doivent transmettre de nombreux paramètres, elles nécessitent donc des données JSON contenant tous les paramètres comme corps de requête POST pour remplacer la méthode FormData de transmission des paramètres. Lorsqu'il y a de nombreux paramètres, POST. JSON Il est plus facile à développer et à tester que POST FormData. Aujourd'hui, nous verrons comment envoyer et accepter JOSN POST en PHP, ainsi que la méthode pratique pour accéder aux données de requête JSON fournies par le framework Laravel pour JSON Request.

PHP envoie JSON POST

$url = "http://example.com/request/post/json"; 
$data = json_encode(["foo" => "bar"]);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_exec($curl);
curl_close($curl);

PHP accepte JSON POST

$data = json_decode(file_get_contents('php://input'), true);

$HTTP_RAW_POST_DATA](http://php.net/manual/zh/reserved.variables.httprawpostdata.php) car il ne dépend pas d'un directive php.ini. De plus, le cas où [$HTTP_RAW_POST_DATA n'est pas renseigné par défaut nécessite potentiellement moins de mémoire que lorsque always_populate_raw_post_data est activé. Lorsque enctype="multipart/form-data" est utilisé, php://input n'est pas valide.

Remarque : avant PHP 5.6, le flux de données ouvert par php://input ne peut être lu qu'une seule fois ; le flux de données ne prend pas en charge l'opération de recherche. Cependant, en fonction de l'implémentation de SAPI, lorsque les données du corps de la requête sont enregistrées, il peut ouvrir un autre flux de données php://input et le relire. En règle générale, cela n'est le cas que pour les requêtes POST, pas pour les autres méthodes de requête telles que PUT ou PROPFIND.

Utilisez Guzzle pour envoyer des requêtes JSON

Souvent, dans le développement, nous n'utilisons pas la bibliothèque php curl pour envoyer des requêtes comme ci-dessus mais utilisons des requêtes open source Http package, un package HTTP couramment utilisé tel que Guzzle fournit des méthodes pratiques pour envoyer des requêtes JSON.

//Guzzle version >= 5
use GuzzleHttp\Client;

$client = new Client();

$response = $client->post('url', [
 GuzzleHttp\RequestOptions::JSON => ['foo' => 'bar']
]);

Accepter JSON POST dans Laravel

Utiliser le json() de la requête-> () obtient l'intégralité du JSON dans le corps de la requête

//IN controller
public function recieveJson(Request $request)
{
 $request->json()->all();
 //返回值是一个数组
 //针对前面的请求例子,json方法返回的是数组 ["foo" => "bar"]
 //$request->json()返回的是ParamBage
}

Utilisez la méthode de saisie de Request pour obtenir l'intégralité du JSON ou la valeur d'une clé spécifique dans la requête

Lors de l'envoi d'une requête JSON à une application Laravel, tant que l'en-tête de la requête Content-Type est défini sur application/json, les données JSON peuvent être obtenues via la méthode de saisie, et le Le tableau peut également être analysé via le signe "." :

public function laravelRecieveJson(Reuqest $request)
{
  $foo = $request->input('foo');//echo $foo => 'bar'
  //使用点号获取内嵌数组key的值
  //假设请求体中的JSON为 {"user": {"name": "kevin", "age": 18}}
  $name = $reqeust->input('user.name');//echo $name => 'kevin'
}

Recommandations associées :

Comment utiliser PHP pour accéder à la file d'attente de messages RabbitMQ

PHP implémente simplement la fonction d'enregistrement des visites de sites Web

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