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使用webbrowser浏览指定url的方法
Apr 04 Python
详解Python编程中time模块的使用
Nov 20 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
Python深度优先算法生成迷宫
Jan 22 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
详解Python字典小结
Oct 20 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
python-视频分帧&多帧合成视频实例
Dec 10 Python
python zip,lambda,map函数代码实例
Apr 04 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
Apr 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
用php解析html的实现代码
2011/08/08 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Python 画出来六维图
2019/07/26 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
用python批量下载apk
2020/12/29 Python
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
社区护士演讲稿
2014/08/27 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
暂停营业通知
2015/04/25 职场文书
小学中队长竞选稿
2015/11/20 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS