PHP实现发送和接收JSON请求


Posted in Python onJune 07, 2018

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

PHP发送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接受JSON POST

$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请求提供了便捷的方法。

//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

//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 数据,还可以通过“.”号解析数组:

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'
}
Python 相关文章推荐
python实现从web抓取文档的方法
Sep 26 Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 Python
python提取内容关键词的方法
Mar 16 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
基于python实现音乐播放器代码实例
Jul 01 Python
python基于openpyxl生成excel文件
Dec 23 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 Python
使用python画个小猪佩奇的示例代码
Jun 06 #Python
python re模块的高级用法详解
Jun 06 #Python
Python实现的爬取网易动态评论操作示例
Jun 06 #Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 #Python
利用python如何处理百万条数据(适用java新手)
Jun 06 #Python
Python3实现的Mysql数据库操作封装类
Jun 06 #Python
python操作redis方法总结
Jun 06 #Python
You might like
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
处理单名多值表单的详解
2013/06/08 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
JS实现小米轮播图
2020/09/21 Javascript
Python与shell的3种交互方式介绍
2015/04/11 Python
Python中元组,列表,字典的区别
2017/05/21 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
python交互式图形编程实例(一)
2017/11/17 Python
Python 控制终端输出文字的实例
2019/07/12 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
Python之Sklearn使用入门教程
2021/02/19 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
广告业务员岗位职责
2015/02/13 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技