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).