Home  >  Article  >  Backend Development  >  PHP implements sending and receiving JSON requests

PHP implements sending and receiving JSON requests

不言
不言Original
2018-06-07 09:56:233664browse

This article shares with you the detailed methods and example codes for sending and receiving JSON requests in PHP. Interested friends can refer to it.

In current microservices, many APIs require the use of JSON data containing all parameters as the request body of the POST request to replace the FormData method of passing parameters due to the large number of parameters that need to be passed. When the number of parameters is large, POST JSON It is easier to develop and test than POST FormData. Today we will take a look at how to send and accept JOSN POST in PHP, as well as the convenient method for accessing JSON request data provided by the Laravel framework for JSON Request.

PHP sends 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 accepts JSON POST

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

$HTTP_RAW_POST_DATA](http://php.net/manual/zh/reserved.variables.httprawpostdata.php) because it does not rely on specific php.ini directives . Also, the case where [$HTTP_RAW_POST_DATA is not populated by default, potentially requires less memory than when always_populate_raw_post_data is activated. When enctype="multipart/form-data" is used, php://input is invalid.

Note: Before PHP 5.6, the data stream opened by php://input can only be read once; the data stream does not support the seek operation. However, depending on the implementation of SAPI, when the request body data is saved, it can open another php://input data stream and re-read it. Typically, this is only the case for POST requests, not other request methods such as PUT or PROPFIND.

Use Guzzle to send JSON requests

Many times in development we do not use the php curl library to send requests as above but use open source Http package, commonly used Http package such as Guzzle provides convenient methods for sending JSON requests.

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

$client = new Client();

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

Accepting JSON POST in Laravel

Use Request's json()->all( )Get the entire JSON in the request body

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

Use the input method of Request to get the entire JSON or specific key value in the request

When sending a JSON request to a Laravel application, as long as the Content-Type request header is set to application/json, the JSON data can be obtained through the input method, and the array can also be parsed through the "." sign:

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'
}

Related recommendations:

How to use PHP to access the RabbitMQ message queue

PHP simple implementation Function to record website visits

The above is the detailed content of PHP implements sending and receiving JSON requests. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn