前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php获取post请求的json参数

php获取post请求的json参数

作者头像
vimsudoers
修改2020-02-11 11:19:08
7.8K0
修改2020-02-11 11:19:08
举报
文章被收录于专栏:PHP点滴PHP点滴

转自:快乐编程»php获取post请求的json参数

早年APP还不火的时候,php用来开发网站的表单提交,获取post参数都是用$_POST对象获取。后来开始用来开发app接口,和前端同事沟通用json格式数据传递,post请求传递的参数也是json格式,一开始不太明白,以为http请求头中的body是形如这样的格式:

代码语言:javascript
复制
json_param=一个json格式的字符串

就是把所有参数封到一起,然后编码成json格式,最后以kv的形式传递上来,但是后来发现不是,所谓的json数据格式是http请求中的body是一个json格式的字符串,这个用$_POST就获取不到了。下面结合http头信息来理了一下这些个方式http请求body中的不同和如何获取这类型的参数。

php做网页的表单提交

早年网页表单的提交,都是用$_POST获取请求参数,实际上在http请求头中是用kv值的形式存在,如:

网页表单提交http请求头
网页表单提交http请求头

网页表单提交http请求头

php在接收到这种请求的时候,php底层系统会将这种字符串解析并存放进$_POST变量中,所以在php中就可以通过$_POST获取这些参数。注意看下,这里的Content-Type是:application/x-www-form-urlencoded

当然在上传文件的时候,表单需要增加一个 enctype=”multipart/form-data” 才可以。早年一直不明白为什么,后来才知道这时候http头格式发生了变化,如下图:

上传文件http请求头
上传文件http请求头

上传文件http请求头

Content-Type变成了multipart/form-data格式,这种格式的数据获取在php底层也做了处理,普通的非文件参数一样可以通过$_POST获取,文件参数可以通过$_FILES获取。

那么开头说的json格式数据是咋一回事呢?下面分析一下。

php获取json格式数据

一开始也尝试用$_POST获取,结果没有取到,后来抓了包后才了解到:json格式的数据指的的http头body的字符串是一个json格式的字符串

下面截个http头就明白了。

http请求参数为json格式
http请求参数为json格式

http请求参数为json格式

这个在PHP中无法通过$_POST取到,php底层没有对这种方式进行处理。那么可以通过怎么样的方式去获取呢?在php中可以通过如下方式获取:

1

file_get_contents("php://input");

看到这个才恍然大悟,以前处理flash上传图片的时候也是通过这种方式获取body中的字节流的。获取到body内的数据后后续的处理就简单了,直接json_decode一下就可以了。

小结

踩完坑之后,又学到了不少新的东西,http请求头中其实还包含了不少格式,除了json,还有xml,html等等。

http各种请求头
http各种请求头

http各种请求头

为什么用json这种方式来传递数据,不用传统的kv形式呢?其实用这种方式也有一个好处,就是可以很好的支持多维数组的传递,比如下单的时候,传递的商品参数中就会有多个,传统的kv形式不好处理,用json的方式就很好解决了。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • php做网页的表单提交
  • php获取json格式数据
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档