File_get_contents ( "php://input" ) или $HTTP_RAW_POST_DATA, какой из них лучше получить тело запроса JSON?

file_get_contents ( "php://input" ) или $HTTP_RAW_POST_DATA, какой из них лучше получить тело запроса JSON?

И какой тип запроса (GET или POST) следует использовать для отправки данных JSON при использовании клиентской стороны XmlHTTPRequest?

Мой вопрос был вдохновлен этим ответом: Как отправить JSON на PHP с завитком

Он говорит:

С точки зрения протокола file_get_contents("php://input") на самом деле более корректно, так как вы все равно не обрабатываете данные мультиплексора http.

Ответ 1

Фактически php://input позволяет вам читать необработанные данные POST.

Это менее интенсивно использующая память альтернатива $HTTP_RAW_POST_DATA и не нуждается в каких-либо специальных директивах php.ini.

php://input недоступен с enctype="multipart/form-data".

Ссылка: http://php.net/manual/en/wrappers.php.php

Ответ 2

php://input - это поток только для чтения, который позволяет вам читать исходные данные от органа запроса. В случае запросов POST предпочтительнее использовать php://ввод вместо $HTTP_RAW_POST_DATA как , это не зависят от специальных директив php.ini. Более того, для этих случаев где $HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее энергоемкая альтернатива активации always_populate_raw_post_data.

Источник: http://php.net/manual/en/wrappers.php.php.

Ответ 3

file_get_contents (php://input) - получает необработанные данные POST, и вам нужно использовать это при написании API-интерфейсов и необходимости ввода XML/JSON/..., которые невозможно декодировать до $_POST с помощью PHP Пример:

отправить по почте строку 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

Применяются обычные правила для отправки запроса. Если запрос предназначен для извлечения информации (например, результата "подсказки частичного поиска" или новой страницы для отображения и т.д.), Вы можете использовать GET. Если отправляемые данные являются частью запроса на изменение (обновление базы данных, удаление записи и т.д.), Используйте POST.

На стороне сервера нет причин использовать исходный ввод, если вы не хотите захватить весь блок сообщений/получения данных за один раз. Вы можете получить нужную информацию с помощью массивов _GET/_POST, как обычно. Библиотеки AJAX, такие как MooTools/jQuery, будут обрабатывать сложную часть выполнения фактических вызовов AJAX и данных формы кодирования в соответствующие форматы для вас.

Ответ 5

Ваш второй вопрос прост, у GET ограничение по размеру составляет 1-2 килобайта как на стороне сервера, так и на стороне браузера, поэтому любые большие объемы данных, которые вы должны были бы отправлять через POST.

Ответ 6

Для данных JSON гораздо проще ПОСТ-ТАК как "тип приложения /json ". Если вы используете GET, вам нужно URL-кодировать JSON в параметре, и это довольно грязно. Кроме того, при POST не существует ограничения по размеру. GET размер, если он очень ограничен (максимум 4K).