file_get_contents(“php:// input”)或$ HTTP_RAW_POST_DATA,哪一个更好地获取JSON请求的主体?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了file_get_contents(“php:// input”)或$ HTTP_RAW_POST_DATA,哪一个更好地获取JSON请求的主体?相关的知识,希望对你有一定的参考价值。

file_get_contents("php://input")$HTTP_RAW_POST_DATA - 哪一个更好地获得JSON请求的主体?

当使用客户端GET时,我应该使用哪种请求类型(POSTXmlHTTPRequest)来发送JSON数据?

我的问题来自这个答案:How to post JSON to PHP with curl

从那个回答引用:

从协议的角度来看,file_get_contents("php://input")实际上更正确,因为无论如何你还没有真正处理http多部分表单数据。

答案

实际上php://input允许您读取原始POST数据。

它是$ HTTP_RAW_POST_DATA的内存密集型替代品,不需要任何特殊的php.ini指令。

php://input不适用于enctype="multipart/form-data"

参考:http://php.net/manual/en/wrappers.php.php

另一答案

php:// input是一个只读流,允许您从请求正文中读取原始数据。在POST请求的情况下,最好使用php:// input而不是$ HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令。此外,对于默认情况下未填充$ HTTP_RAW_POST_DATA的情况,它可能是激活always_populate_raw_post_data的内存密集型替代方案。

资料来源:http://php.net/manual/en/wrappers.php.php

另一答案

file_get_contents(php:// input) - 获取原始POST数据,你需要在编写API时使用它,并且需要XML / JSON / ...输入,这些输入无法通过PHP解码为$ _POST一些例子:

通过邮寄JSON字符串发送

<input type="button" value= "click" onclick="fn()">
<script>
 function fn(){


    var js_obj = {plugin: 'jquery-json', version: 2.3};

    var encoded = JSON.stringify( js_obj );

var data= encoded


    $.ajax({
  type: "POST",
  url: '1.php',
  data: data,
  success: function(data){
    console.log(data);
  }

});

    }
</script>

1.PHP

//print_r($_POST); //empty!!! don't work ... 
var_dump( file_get_contents('php://input'));
另一答案

通常的规则应适用于您发送请求的方式。如果请求是检索信息(例如,部分搜索'提示'结果,或要显示的新页面等等),则可以使用GET。如果发送的数据是更改内容的请求(更新数据库,删除记录等等)的一部分,则使用POST。

服务器端,没有理由使用原始输入,除非你想一次性获取整个post / get数据块。您可以像往常一样通过_GET / _POST数组检索所需的特定信息。诸如MooTools / jQuery之类的AJAX库将处理执行实际AJAX调用和将表单数据编码为适当格式的困难部分。

另一答案

对于JSON数据,将它作为“application / json”内容类型发布要容易得多。如果你使用GET,你必须在参数中对JSON进行URL编码,这有点混乱。此外,POST时没有大小限制。 GET的大小如果非常有限(最多4K)。

另一答案

第二个问题很简单,GET在服务器端和浏览器端的大小限制为1-2千字节,因此您必须通过POST发送任何类型的大量数据。

以上是关于file_get_contents(“php:// input”)或$ HTTP_RAW_POST_DATA,哪一个更好地获取JSON请求的主体?的主要内容,如果未能解决你的问题,请参考以下文章

php中的file_get_contents或curl?

file_get_contents 通过 php 失败,通过浏览器工作

php PHP Image出力(file_get_contents)

C# 相当于 file_get_contents (PHP)

php file_get_contents 绕过

php file_get_contents抓取