PHP获取HTTP POST中不同格式的数据

Posted php中文网最新课程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP获取HTTP POST中不同格式的数据相关的知识,希望对你有一定的参考价值。

源 / php中文网      源 / www.php.cn


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文件测试一下

1

2

3

<?php

$test=file_get_contents("php://input");

echo $test;

用postman测试一下

PHP获取HTTP POST中不同格式的数据

没问题,可以接收到

2.使用$GLOBALS['HTTP_RAW_POST_DATA']接收

1

2

3

<?php

$test=$GLOBALS['HTTP_RAW_POST_DATA'];

echo $test;

用postman测试一下

PHP获取HTTP POST中不同格式的数据

卧槽,竟然出错了,提示没有发现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中的数据

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

 

namespace app\index\controller;

 

use think\Request;

 

class Index

{

    public function index(Request $request)

    {

        echo $request->getInput();

    }

}

测试一下

没有问题,可以正常获取

关于php获取HTTP POST数据的方法先介绍到这里,希望对需要的朋友有所帮助!

-END-

声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!


请点击下方:“阅读原文”,在线查看全部文章内容!

以上是关于PHP获取HTTP POST中不同格式的数据的主要内容,如果未能解决你的问题,请参考以下文章

gin-post数据

如何用php向服务器发送post请求

关于PHP中POST传递参数问题

php 中发送get请求,后台无法获取

php中获取数据 php://input$_POST与$GLOBALS['HTTP_RAW_POST_DATA']三者的区别

在 php 上接收 HTTP Post 数据