Каково различие между POST и необработанным POST в PHP вообще?

У меня есть этот вопрос после чтения ответа здесь, каково различие вообще?

Действительно ли возможно отправить необработанное сообщение с HTML?

6
задан Community 23 May 2017 в 12:17
поделиться

4 ответа

Мы можем разделить отправку формы в трех случаях:

  1. Отправка с типом содержимого application / x-www-form-urlencoded
  2. Представления с типом содержимого multipart / form-data
  3. Другие представления.

В случаях 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 будет недоступен.

24
ответ дан 8 December 2019 в 03:26
поделиться

$ 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, вы можете POST все, что захотите, с помощью AJAX . Примерно так:

var req = new XMLHttpRequest();
req.open('POST', 'http://www.example.com/my_url' true);
req.send('any data you want');

позволит вам отправлять произвольные вещи на веб-сервер.

5
ответ дан 8 December 2019 в 03:26
поделиться

$ _ POST - это ассоциативный массив входящих параметров POST. PHP создает это для вас из необработанного HTTP-сообщения. Если вы хотите самостоятельно обрабатывать необработанные данные POST (у вас могут быть двоичные данные, отправленные в POST), используйте $ HTTP_RAW_POST_DATA.

0
ответ дан 8 December 2019 в 03:26
поделиться

_POST предполагает, что это значения формы application / x-www-form-urlencoded или multipart / form-data . HTTP_RAW_POST_DATA , если он заполнен, является необработанной строкой. Вы также можете получить к нему доступ с помощью psuedo-url php: // input . Вы можете отправлять произвольные данные POST (например, XML, JSON, HTML) с помощью AJAX.

0
ответ дан 8 December 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: