У меня есть этот вопрос после прочтения ответа здесь , какая разница вообще?
Можно ли отправить raw POST с помощью html?
Мы можем разделить формы в трех случаях:
application/x-www-form-urlencoded
типа контента application/x-www-form-urlencoded
multipart/form-data
В случаях 1 и 3 $HTTP_RAW_POST_DATA
содержит исходные данные (за исключением того, что для опции always_populate_raw_post_data
установлено значение false
, и в этом случае $HTTP_RAW_POST_DATA
пуст в случае 1), то есть данные точно как клиент (обычно браузер) отправил его. В случае 1 данные имеют такую форму, как
key1=value1&key2=value2&key3[]=value3.1&key3[]=value3.2
PHP автоматически анализирует это, так что $_POST
становится:
$_POST = array( "key1" => "value1", "key2" => "value2", "key3" => array("value3.1", "value3.2"); )
Содержимое исходных данных также может быть доступно через вход php://input
, даже в случае 1, когда для параметра always_populate_raw_post_data
установлено значение false
. В частности, file_get_contents("php://input")
дает те же данные, что и у $HTTP_RAW_POST_DATA
.
В случае 3, в котором данные POST произвольны, $_POST
будет пустым массивом, и всегда будет заполняться $HTTP_RAW_POST_DATA
.
Случай 2 является особенным. В этом случае PHP будет анализировать данные, а $_POST
получит содержимое полей, которые не загружены, но php://input
и $HTTP_RAW_POST_DATA
будут недоступны.
$HTTP_RAW_POST_DATA
будет содержать что-то вроде:
beans=cheese&spam=eggs&one=two
PHP разбивает это на вас и запихивает в массив $_POST
. Наивно, он делает что-то вроде этого:
$parts = explode('&', $HTTP_RAW_POST_DATA); foreach ( $parts as $part ) { list($key, $value) = explode('=', $part, 2); $_POST[$key] = $value; }
Используя JavaScript, который может быть встроен в HTML, вы можете ПОЧТИ что угодно, используя AJAX . Что-то вроде этого:
var req = new XMLHttpRequest(); req.open('POST', 'http://www.example.com/my_url' true); req.send('any data you want');
позволит вам ПОСТУПИТЬ произвольные вещи на веб-сервер.
$ _POST – ассоциативный массив входящих параметров POST. PHP создает это для вас из необработанного HTTP-сообщения. Если вы хотите иметь дело с необработанными данными POST самостоятельно (у вас могут быть некоторые двоичные данные, отправленные в POST), используйте $ HTTP_RAW_POST_DATA.
_POST
предполагает, что это application/x-www-form-urlencoded
или multipart/form-data
. HTTP_RAW_POST_DATA
, если заполняется, является исходной строкой. Вы также можете получить доступ к этому с помощью php://input
psuedo-url php://input
. Вы можете отправлять произвольные данные POST (например, XML, JSON, HTML) с помощью AJAX.