В процессе интеграции 1С с внешними веб-сервисами часто возникает необходимость передачи данных методом POST. Основная сложность заключается в выборе правильных методов платформы и корректной настройке заголовков запроса, чтобы сервер смог распознать и обработать полученную информацию. Давайте разберем этот процесс детально.
Первое, на что необходимо обратить внимание — это разница между GET и POST запросами в платформе 1С. Многие начинающие разработчики совершают ошибку, используя метод Получить() объекта HTTPСоединение для отправки данных.
Метод Получить() предназначен для выполнения GET-запросов (запрос данных с сервера). Если же ваша задача — отправить данные на сервер (например, логин/пароль или параметры заказа), необходимо использовать метод ОтправитьДляОбработки(). Этот метод позволяет передать объект HTTPЗапрос, содержащий тело запроса.
Следующий важный шаг — это определение того, в каком формате ожидает данные удаленный сервер. В обсуждении мы столкнулись с двумя основными подходами:
login=user&pass=123.Если сервер ожидает JSON, вы обязаны указать это в заголовке запроса. Используйте для этого объект Соответствие, который передается в конструктор HTTPЗапрос.
Давайте создадим универсальный алгоритм для формирования запроса с передачей JSON-структуры. Этот подход обеспечит корректную сериализацию данных и защитит от ошибок кодировки.
ДанныеСтруктура, в которую поместите все необходимые параметры.ЗаписьJSON для преобразования структуры в строку. Это избавит вас от необходимости вручную экранировать кавычки или спецсимволы.Content-Type в значение application/json; charset=utf-8.ОтправитьДляОбработки(), передав туда подготовленный HTTPЗапрос.Ниже представлен пример кода, который объединяет эти шаги в рабочую логику:
// Формируем данные в виде структуры
ДанныеСтруктура = Новый Структура;
ДанныеСтруктура.Вставить("Account", "ЛогинПользователя");
ДанныеСтруктура.Вставить("Password", "ПарольПользователя");
ДанныеСтруктура.Вставить("IsApproved", Истина);
// Преобразуем структуру в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеСтруктура);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Создаем соединение
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
HTTP = Новый HTTPСоединение("адрес.сервера.com", 443, , , ЗащищенноеСоединение);
// Настраиваем заголовки
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
// Создаем запрос
ЗапросДанных = Новый HTTPЗапрос("/api/login", ЗаголовокHTTP);
ЗапросДанных.УстановитьТелоИзСтроки(СтрокаJSON);
// Отправляем запрос на сервер
Ответ = HTTP.ОтправитьДляОбработки(ЗапросДанных);
// Анализируем результат
Если Ответ.КодСостояния = 200 Тогда
Результат = Ответ.ПолучитьТелоКакСтроку();
// Обработка успешного ответа
Иначе
Сообщить("Ошибка при запросе: " + Ответ.КодСостояния);
КонецЕсли;
Если после выполнения кода вы получаете ошибку, разберем возможные причины:
JSON, а в заголовке указан x-www-form-urlencoded, сервер не поймет структуру данных.HTTPЗапрос правильно (например, он должен начинаться с /).400 Bad Request почти всегда означает, что отправленный JSON-объект не соответствует ожидаемой сервером структуре. Проверьте имена полей (ключей) в структуре 1С.ЗаголовокHTTP.Вставить("Authorization", "Bearer " + Токен).Используйте инструменты отладки в браузере (вкладка Network), чтобы увидеть, как именно формируется запрос при ручной работе с сайтом. Повторив структуру параметров, заголовков и тип тела запроса в коде 1С, вы сможете успешно интегрировать любую систему.