При интеграции 1С с внешними веб-сервисами часто возникает ситуация, когда принимающая сторона не поддерживает формат JSON или требует передачи данных в специфическом формате application/x-www-form-urlencoded. Разберем, как правильно сформировать и отправить такой запрос, избегая использования ЗаписьJSON.
Формат application/x-www-form-urlencoded — это классический способ передачи данных в веб-запросах. Он представляет собой текстовую строку, в которой пары ключ=значение отделяются друг от друга символом & (амперсанд). Если значения содержат специальные символы (пробелы, русские буквы, спецсимволы), их необходимо приводить к URL-безопасному виду.
В отличие от JSON, где структура данных может быть вложенной (объекты внутри объектов), этот формат по своей сути является «плоским». Однако, если вам необходимо передать массив данных, вы можете использовать конструкцию с квадратными скобками, которую понимают многие современные веб-серверы (PHP, Python, Node.js): ключ[]=значение1&ключ[]=значение2.
Рассмотрим вариант реализации с использованием компоненты WinHttp.WinHttpRequest.5.1. Это надежный и проверенный временем способ для платформы Windows, позволяющий гибко управлять заголовками запроса.
Для начала работы нам необходимо инициализировать COM-объект и задать необходимые параметры кодировки. Важно помнить, что для корректной передачи кириллицы необходимо явно указывать utf-8.
Попытка
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2, "utf-8"); // Устанавливаем кодировку UTF-8
WinHttp.Open("POST", url, 0); // Открываем соединение
// Устанавливаем необходимые заголовки
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset", "utf-8");
WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
// Формируем тело запроса
ПараметрыПОСТ = "id=" + ГУИДКонтрагента;
ПараметрыПОСТ = ПараметрыПОСТ + "&" + "type=" + "kontragent";
ПараметрыПОСТ = ПараметрыПОСТ + "&" + "name=" + КодироватьСтроку(Источник.Наименование, СпособКодированияСтроки.КодировкаURL);
// Отправляем данные
WinHttp.Send(ПараметрыПОСТ);
// Получаем ответ от сервера
ТекстОтвета = WinHttp.ResponseText();
Сообщить(ТекстОтвета);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КодироватьСтроку с параметром СпособКодированияСтроки.КодировкаURL для значений, которые могут содержать спецсимволы, иначе сервер может неверно интерпретировать входящую строку.HTTPЗапрос и HTTPСоединение. Это обеспечит кроссплатформенность вашего кода (работа на Linux-серверах) и исключит зависимость от COM-объектов.ПараметрыПОСТ в отладчике. Она должна выглядеть как последовательность вида key1=value1&key2=value2.Данный метод идеально подходит для:
JSON.Таким образом, передача данных через POST-запрос без JSON сводится к правильному формированию строки с разделителями & и установке соответствующего заголовка Content-type. Это стандартный и эффективный способ взаимодействия между системами, который требует внимательности лишь при формировании самой строки параметров.