Должен ли я кодировать данные POST?

Я отправляю данные во внешний API (используя PHP, если это актуально).

Должен ли я кодировать URL-адреса переменных POST, которые я передаю?

Или мне нужны только данные GET для URL-кодирования?

Спасибо!

UPDATE: Это мой PHP, если это имеет значение:

$fields = array(
    'mediaupload'=>$file_field,
    'username'=>urlencode($_POST["username"]),
    'password'=>urlencode($_POST["password"]),
    'latitude'=>urlencode($_POST["latitude"]),
    'longitude'=>urlencode($_POST["longitude"]),
    'datetime'=>urlencode($_POST["datetime"]),
    'category'=>urlencode($_POST["category"]),
    'metacategory'=>urlencode($_POST["metacategory"]),
    'caption'=>($_POST["description"])
);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
+97
06 июл. '11 в 22:43
источник поделиться
3 ответа

Общий ответ

Общий ответ на ваш вопрос заключается в том, что это зависит. И вы можете решить, указав, что ваш "Content-Type" находится в заголовках HTTP.

Значение "application/x-www-form-urlencoded" означает, что ваш объект POST должен быть закодирован в URL как строка параметров GET. Значение "multipart/form-data" означает, что вы будете использовать ограничители контента и НЕ кодировать URL-адрес.

Этот ответ содержит гораздо более подробное объяснение, если вам нужна дополнительная информация.


Конкретный ответ

Для ответа, специфичного для библиотек PHP, которые вы используете (CURL), вы должны прочитать документацию здесь.

Здесь соответствующая информация:

CURLOPT_POST

ИСТИНА, чтобы выполнить обычный HTTP POST. Этот POST - это обычный тип приложения /x -www-form-urlencoded, наиболее часто используемый HTML-формами.

CURLOPT_POSTFIELDS

Полные данные для публикации в HTTP-режиме "POST". Чтобы опубликовать файл, добавьте имя файла с помощью @и используйте полный путь. Тип файла может быть явно указан, следуя имени файла с типом в формате '; type = mimetype'. Этот параметр может быть передан как строка с urlencoded, такая как "para1 = val1 & para2 = val2 &..." или как массив с именем поля в качестве ключа и данными поля как значение. Если значением является массив, заголовок Content-Type будет установлен в multipart/form-data. Начиная с PHP 5.2.0, значение должно быть массивом, если файлы передаются этому параметру с префиксом @.

+109
03 апр. '12 в 22:54
источник

Связанные вопросы


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

@DougW четко ответил на этот вопрос, но мне все же нравится добавлять здесь некоторые коды, чтобы объяснить точки Дуга. (И правильные ошибки в коде выше)

Решение 1. URL-кодирование данных POST с заголовком содержимого: application/x-www-form-urlencoded.

Примечание: вам не нужно вводить urlencode $_POST [] по одному, функция http_build_query() может выполнять работу с urlencoding.

$fields = array(
    'mediaupload'=>$file_field,
    'username'=>$_POST["username"],
    'password'=>$_POST["password"],
    'latitude'=>$_POST["latitude"],
    'longitude'=>$_POST["longitude"],
    'datetime'=>$_POST["datetime"],
    'category'=>$_POST["category"],
    'metacategory'=>$_POST["metacategory"],
    'caption'=>$_POST["description"]
);

$fields_string = http_build_query($fields);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);

Решение 2. Передайте массив непосредственно в качестве пост-данных без URL-кодирования, в то время как заголовок Content-Type будет установлен в multipart/form-data.

$fields = array(
        'mediaupload'=>$file_field,
        'username'=>$_POST["username"],
        'password'=>$_POST["password"],
        'latitude'=>$_POST["latitude"],
        'longitude'=>$_POST["longitude"],
        'datetime'=>$_POST["datetime"],
        'category'=>$_POST["category"],
        'metacategory'=>$_POST["metacategory"],
        'caption'=>$_POST["description"]
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$fields);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($ch);

Оба фрагмента кода работают, но используют разные заголовки и тела HTTP.

+9
19 июл. '14 в 3:43
источник

curl будет кодировать данные для вас, просто отбросьте данные необработанного поля в массив полей и скажите "идти".

+2
26 мая '13 в 23:19
источник

Посмотрите другие вопросы по меткам или Задайте вопрос