file_get_contents("php://input") o $HTTP_RAW_POST_DATA – cuál es el mejor para conseguir el cuerpo de la petición JSON?

Y que tipo de solicitud (GET o POST) debo utilizar para enviar datos JSON cuando se utiliza lado del cliente XmlHTTPRequest?

Mi pregunta fue inspirado de esta respuesta:
Cómo publicar JSON con PHP y curl

Cita de la respuesta:

De un protocolo perspectiva file_get_contents("php://input") que en realidad es más correcto, ya que realmente no estás de procesamiento http formulario multipart datos de todos modos.

  • llegaste respuesta que usted necesita? 😉
  • Supongo que no, porque él no ha aceptado una respuesta 😉
InformationsquelleAutor Manuel Bitto | 2010-04-28

6 Comentarios

  1. 185

    Realidad php://input permite leer raw POSTERIOR de los datos.

    Es menos intensivo de memoria alternativa a $HTTP_RAW_POST_DATA y no necesita ningún tipo especial de php.directivas ini.

    php://input no está disponible con enctype="multipart/form-data".

    Referencia: http://php.net/manual/en/wrappers.php.php

    • Nunca había oído hablar de este método para recuperar los datos, gran respuesta!
    • Además, a partir de PHP 5.6, $HTTP_RAW_POST_DATA se considera obsoleto, y php://input pueden ser reutilizados.
    • Véase también enable_post_data_reading.
    • json_decode(file_get_contents(‘php://input’),true) ¿ este apoyo en PHP 7.1 para obtener $_GET valores de URL?
  2. 13

    php://input es un sólo lectura secuencia que le permite leer los datos en bruto
    del cuerpo de la solicitud. En el caso de solicitudes POST, es preferible
    el uso de php://input en lugar de $HTTP_RAW_POST_DATA como no
    dependen especial de php.directivas ini
    . Por otra parte, para aquellos casos en
    donde $HTTP_RAW_POST_DATA no se rellena por defecto, es un
    potencialmente menos intensivo de memoria alternativa a la activación de
    always_populate_raw_post_data.

    Fuente: http://php.net/manual/en/wrappers.php.php.

    • Además, a partir de PHP 5.6, $HTTP_RAW_POST_DATA se considera obsoleto, y php://input pueden ser reutilizados.
  3. 9

    file_get_contents(php://input) – obtiene el raw POSTERIOR de los datos y que usted necesita para utilizar esta al escribir Api y la necesidad de XML/JSON/… de entrada que no pueden ser decodificados para $_POST por PHP
    algunos ejemplo :

    enviar por correo cadena 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

    Las normas habituales que se deben aplicar para enviar la solicitud. Si la solicitud es para recuperar la información (por ejemplo, una búsqueda parcial de ‘ayuda’, o una nueva página se muestran, etc…) puede OBTENER. Si los datos que se envían es parte de una solicitud para cambiar algo (actualización de una base de datos, eliminar un registro, etc..), a continuación, utilice POST.

    Del lado del servidor, no hay ninguna razón para utilizar la entrada bruta, a menos que usted quiere tomar todo el post/get bloque de datos en una sola vez. Usted puede recuperar la información específica que desea a través de la _GET/_POST matrices como de costumbre. AJAX bibliotecas como MooTools/jQuery se encargará de la parte más difícil de hacer el real de las llamadas AJAX y codificación de datos en formatos apropiados para usted.

    • Ese es el punto: quiero tomar todo el post/get bloque de datos en una sola vez, porque JSON es una variable de menor formato, represente para nada solo los datos.
    • No veo por qué esto es necesario, ¿por qué no poner los datos JSON en un POST en el campo y hacer con ella?
    • Si usted quiere que todo el JSON bloque, entonces ¿por qué no asignar el JSON bloque de texto a un campo de formulario y presentarlo como que? <input type="hidden" name="data" value="json data here" /> es perfectamente aceptable, y permite recuperar trivialmente en el lado del servidor con $_REQUEST[‘data’].
    • La incrustación de JSON en un POST en el campo de las derrotas el propósito de la HTTP content-type de la etiqueta, y no es tan agradable para la depuración en Fiddler y navegador depuradores (que puede comprender JSON). También, muchos 3ª parte de las bibliotecas de JavaScript POST JSON cargas como application/json.
  5. 2

    De datos JSON, es mucho más fácil PUBLICAR como «application/json» content-type. Si usa GET, tienes la URL de codificar el JSON en un parámetro y el tipo de desorden. Además, no hay límite de tamaño cuando usted publica. OBTENER el tamaño si muy limitado (4K en la mayoría).

    • A menudo hay un límite de tamaño para el POST, pero por lo general establece muy alto. Revise su php.ini.
  6. 2

    La segunda pregunta es fácil, CONSEGUIR tiene una limitación de tamaño de 1 a 2 kilobytes en el servidor y el lado del navegador, por lo que cualquier tipo de grandes cantidades de datos que usted tendría que enviar a través de CORREOS.

Dejar respuesta

Please enter your comment!
Please enter your name here