gpt4 book ai didi

PHP实现发送和接收JSON请求

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP实现发送和接收JSON请求由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

现在微服务中,很多API由于需要传递的参数较多所以要求用包含所有参数的JSON数据作为POST请求的请求体来替代FormData传递参数的方式,在参数量较多时POST JSON要比POST FormData便于开发和测试,今天我们就来看一下在PHP中如何发送和接受JOSN POST,以及在Laravel框架中针对JSON Request提供的访问JSON请求数据的便捷方法.

PHP发送JSON POST 。

?
1
2
3
4
5
6
7
8
9
10
$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接受JSON POST 。

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

$HTTP_RAW_POST_DATA](http://php.net/manual/zh/reserved.variables.httprawpostdata.php),因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 [$HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的.

Note: 在 PHP 5.6 之前 php://input 打开的数据流只能读取一次; 数据流不支持 seek 操作。 不过,依赖于 SAPI 的实现,请求体数据被保存的时候, 它可以打开另一个 php://input 数据流并重新读取。 通常情况下,这种情况只是针对 POST 请求,而不是其他请求方式,比如 PUT 或者 PROPFIND.

使用Guzzle发送JSON请求 。

很多时候在开发中我们并不会像上面那样用php curl库来发送请求而是使用开源的Http包,常用的Http package比如 Guzzle都有为发送JSON请求提供了便捷的方法.

?
1
2
3
4
5
6
7
8
/ / Guzzle version > = 5
use GuzzleHttp\Client;
 
$client = new Client();
 
$response = $client - >post( 'url' , [
  GuzzleHttp\RequestOptions::JSON = > [ 'foo' = > 'bar' ]
]);

Laravel中接受JSON POST 。

使用Request的json()->all()获取请求体里的整个JSON 。

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

使用Request的input方法获取请求中的整个JSON或者具体key的值 。

发送 JSON 请求到Laravel应用的时候,只要 Content-Type 请求头被设置为 application/json,都可以通过 input 方法获取 JSON 数据,还可以通过“.”号解析数组:

?
1
2
3
4
5
6
7
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'
}

原文链接:https://segmentfault.com/a/1190000015200120 。

最后此篇关于PHP实现发送和接收JSON请求的文章就讲到这里了,如果你想了解更多关于PHP实现发送和接收JSON请求的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com