http协议中的post 方法有多中格式的数据协议,在http的head中用不同的content-type标识.常用的有
application/x-www-form-urlencoded,这是最常见的,就是from表单的格式.在http的head中是content-type: application/x-www-form-urlencoded.
multipart/form-data,这个是用来上传文件的,在http的head中是content-type: multipart/form-data; boundary=----webkitformboundary7ma4ywxktrzu0gw
raw 这个不是特别常用,传输的数据在http的body中只有一段,不是以键值对的形式存放.在http的head中是content-type: application/json,content-type: text,content-type: application/xml,content-type: text/xml,等等形式
对于content-type: application/x-www-form-urlencoded这种form表单的数据,在php中,使用$_post['name']可以直接获取, 没有什么特别的
content-type: multipart/form-data; 这种格式的数据,在php中使用$_post['name']可以获取字符数据,使用$_files['file']可以获取.
对于raw这种格式的数据,使用以上两种办法没有办法获取到,需要使用别的手段.
1.使用file_get_contents(php://input)获取;写一个简单php文件测试一下
<?php$test=file_get_contents("php://input");echo $test;
用postman测试一下
没问题,可以接收到
2.使用$globals['http_raw_post_data']接收
<?php$test=$globals['http_raw_post_data'];echo $test;
用postman测试一下
卧槽,竟然出错了,提示没有发现http_raw_post_data这个数组索引,什么鬼.google一番,在php的官网看到了这样一段话
原来http_raw_post_data这个在php5.6中已经被废弃了,在php7.0以后的版本中已经被删除了,我用的php版本为7.2,肯定就出错了
好吧,那就老老实实的用file_get_contents("php://input")获取吧
在实际开发中,一般都是使用框架的,我用thinkphp用比较多,在tp5.0中可以使用request的getinput()函数获取raw中的数据
<?phpnamespace app\index\controller;use think\request;class index{ public function index(request $request) { echo $request->getinput(); }}
测试一下
没有问题,可以正常获取
关于php获取http post数据的方法先介绍到这里,希望对需要的朋友有所帮助!
以上就是php获取http post中不同格式的数据的详细内容。