Я отправляю данные во внешний API (используя PHP, если это необходимо).
Должен ли я кодировать URL-адреса переменных POST, которые я передаю?
Или мне нужно только URL-кодировать данные GET?
Спасибо!
ОБНОВЛЕНИЕ: это мой 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);
Ответы:
Общий ответ
Общий ответ на ваш вопрос - это зависит от обстоятельств. И вы можете решить, указав ваш «Content-Type» в заголовках HTTP.
Значение «application / x-www-form-urlencoded» означает, что тело вашего сообщения POST должно быть закодировано в URL-адресе так же, как строка параметра GET. Значение multipart / form-data означает, что вы будете использовать разделители содержимого, а НЕ URL-адрес, кодирующий содержимое.
Этот ответ содержит гораздо более подробное объяснение, если вам нужна дополнительная информация.
Конкретный ответ
Чтобы получить ответ, связанный с используемыми вами библиотеками PHP (CURL), вы должны прочитать документацию здесь .
Вот соответствующая информация:
источник
@DougW четко ответил на этот вопрос, но я все же хотел бы добавить сюда несколько кодов, чтобы объяснить точки зрения Дуга. (И исправьте ошибки в приведенном выше коде)
Решение 1. URL-кодируйте данные POST с заголовком типа содержимого: application / x-www-form-urlencoded.
Примечание: вам не нужно кодировать поля $ _POST [] одно за другим, функция http_build_query () может хорошо выполнять задание urlencoding.
Решение 2. Передайте массив непосредственно как данные сообщения без кодирования URL, в то время как заголовок Content-Type будет установлен на multipart / form-data.
Оба фрагмента кода работают, но используют разные заголовки и тела HTTP.
источник
curl будет кодировать данные за вас, просто поместите ваши необработанные данные поля в массив полей и скажите ему «идти».
источник
Вышеупомянутые сообщения отвечают на вопросы, связанные с кодированием URL-адресов и принципами его работы, но исходные вопросы были «Следует ли мне кодировать URL-адреса POST-данных?» на который нет ответа.
Исходя из моего недавнего опыта работы с кодированием URL, я хотел бы расширить вопрос. "Должен ли я кодировать данные POST по URL так же, как метод GET HTTP. Обычно HTML-формы через браузер, если они заполнены, отправлены и / или ПОЛУЧАЮ некоторую информацию, браузеры будут выполнять кодирование URL, но если приложение предоставляет веб-службу и ожидает Потребители должны выполнять кодирование URL-адресов данных, правильно ли с архитектурной и технической точки зрения выполнять кодирование URL-адресов с помощью метода POST HTTP? "
источник