代码之家  ›  专栏  ›  技术社区  ›  Manuel Bitto

文件获取内容(“php://input”)或$http_raw_post_数据,哪一个更好地获取JSON请求的主体?

  •  100
  • Manuel Bitto  · 技术社区  · 16 年前

    file_get_contents("php://input") $HTTP_RAW_POST_DATA -哪一个更适合获取JSON请求的主体?

    以及请求类型( GET POST )在使用客户端时,我应该使用发送JSON数据吗 XmlHTTPRequest ?

    我的问题是从这个答案中得到启发的: How to post JSON to PHP with curl

    从答案中引用:

    从协议的角度来看 文件获取目录(“php://input”) 实际上更正确,因为您实际上并没有真正处理HTTP多部分表单数据。

    6 回复  |  直到 8 年前
        1
  •  175
  •   zaf    13 年前

    事实上 php://input 允许您读取原始日志数据。

    与$http_raw_post_数据相比,它的内存占用较少,不需要任何特殊的php.ini指令。 .

    PHP: / /输入 不适用于 enctype="multipart/form-data" .

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

        2
  •  12
  •   kjhughes    12 年前

    php://input是一个 只读的 允许您读取原始数据的流 来自请求主体。对于邮寄请求,最好是 使用php://input而不是$http_raw_post_data as 它不 取决于特殊的php.ini指令 . 此外,对于这些情况 如果默认情况下不填充$http_raw_post_数据,则它是 潜在的内存密集型替代激活 总是“填充”原始“后”数据。

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

        3
  •  8
  •   zloctb    10 年前

    file_get_contents(php://input)-获取原始日志数据,在编写API和需要xml/json/时需要使用它。无法通过php解码为$\u post的输入 一些例子:

    通过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'));
    
        4
  •  3
  •   Marc B    16 年前

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

    服务器端,没有理由使用原始输入,除非您想在一次执行中获取整个post/get数据块。您可以像往常一样通过_get/_post数组检索所需的特定信息。像moools/jquery这样的Ajax库将处理实际Ajax调用的困难部分,并将表单数据编码为适合您的格式。

        5
  •  2
  •   ZZ Coder    16 年前

    对于JSON数据,将其作为“application/json”内容类型发布要容易得多。如果您使用GET,那么您必须在一个参数中对JSON进行URL编码,这有点混乱。另外,当你发帖时没有大小限制。如果非常有限(最多4K),则获取尺寸。

        6
  •  2
  •   halfer Jatin Pandey    11 年前

    您的第二个问题很简单,get在服务器和浏览器端都有1-2千字节的大小限制,所以您必须通过post发送更多的数据。