Отправка POST-запроса из 1С:Предприятия — это распространенная задача при интеграции с веб-сервисами, API или другими информационными системами. Для этого используются стандартные объекты платформы 1С: HTTPСоединение и HTTPЗапрос.
Основные шаги для отправки POST-запроса в 1С
Вот пошаговая инструкция с примерами кода:
1. Подготовка данных для отправки
POST-запросы обычно содержат данные в теле запроса (body). Эти данные могут быть в разных форматах:
JSON: Самый популярный формат для API. XML: Используется в SOAP-сервисах или других XML-based API. Form-data (url-encoded или multipart): Как при отправке HTML-форм. Простой текст.
Пример подготовки данных JSON:
Фрагмент кода
// Создадим структуру данных для отправки
ПередаваемыеДанные = Новый Структура;
ПередаваемыеДанные. Вставить("Имя", "Иван");
ПередаваемыеДанные. Вставить("Фамилия", "Петров");
ПередаваемыеДанные. Вставить("Возраст", 30);
// Сериализуем структуру в JSON-строку
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON. УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПередаваемыеДанные);
ТелоЗапросаJSON = ЗаписьJSON. Закрыть();
// Вывод для проверки
Сообщить("Отправляемый JSON: " + ТелоЗапросаJSON);
2. Создание HTTPСоединения
Объект HTTPСоединение (HTTPSConnection для HTTPS) управляет подключением к серверу.
Фрагмент кода
// Параметры сервера
Хост = "api. example. com"; // Домен или IP-адрес
Порт = 443; // 80 для HTTP, 443 для HTTPS
ПутьКРесурсу = "/users"; // Часть URL после хоста, например, /api/data
// Определяем, использовать ли HTTPS
ИспользоватьHTTPS = Истина; // Или Ложь для HTTP
Попытка
Если ИспользоватьHTTPS Тогда
Соединение = Новый HTTPSСоединение(Хост, Порт);
Иначе
Соединение = Новый HTTPСоединение(Хост, Порт);
КонецЕсли;
Исключение
Сообщить("Ошибка создания HTTPСоединения: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
3. Создание HTTPЗапроса
Объект HTTPЗапрос представляет собой сам запрос с указанием метода, заголовков и тела.
Фрагмент кода
Запрос = Новый HTTPЗапрос(ПутьКРесурсу);
Запрос. УстановитьТелоИзСтроки(ТелоЗапросаJSON, КодировкаТекста. UTF8); // Указываем подготовленные JSON-данные и кодировку
// Установка заголовков
// Важно: для JSON обязательно нужен заголовок Content-Type
Запрос. Заголовки. Вставить("Content-Type", "application/json; charset=utf-8");
Запрос. Заголовки. Вставить("Accept", "application/json"); // Ожидаем JSON в ответ
// Если требуется авторизация (например, Bearer Token)
// ТокенАвторизации = "your_access_token_here";
// Запрос. Заголовки. Вставить("Authorization", "Bearer " + ТокенАвторизации);
// Если нужны другие заголовки (например, API Key)
// Запрос. Заголовки. Вставить("X-API-Key", "your_api_key");
4. Отправка запроса и получение ответа
Метод Отправить() объекта HTTPСоединение выполняет запрос и возвращает HTTPОтвет.
Фрагмент кода
Попытка
Ответ = Соединение. Отправить(Запрос);
// Проверка статуса ответа
Если Ответ. КодСостояния = 200 Тогда // 200 OK — запрос выполнен успешно
Сообщить("Запрос успешно отправлен.");
// Получение тела ответа
ТелоОтвета = Ответ. ПолучитьТелоКакСтроку(КодировкаТекста. UTF8);
Сообщить("Получен ответ: " + ТелоОтвета);
// Если ответ в JSON, можно его разобрать
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON. УстановитьСтроку(ТелоОтвета);
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
Сообщить("Разобранные данные ответа: " + ДанныеОтвета);
Иначе
// Обработка ошибок по коду состояния
Сообщить("Ошибка при отправке запроса. Код состояния: " + Ответ. КодСостояния);
Сообщить("Описание ошибки: " + Ответ. ПолучитьТелоКакСтроку(КодировкаТекста. UTF8));
// Можно получить и другие заголовки ответа
// Сообщить("Заголовки ответа: " + Ответ. Заголовки);
КонецЕсли;
Исключение
Сообщить("Произошла ошибка при выполнении HTTP-запроса: " + ОписаниеОшибки());
КонецПопытки;
Полный пример кода (JSON POST-запрос)
Фрагмент кода
&НаКлиенте
Процедура ОтправитьPOSTЗапросНаСервер(Команда)
// Вызов серверной функции для отправки запроса
ОтправитьPOSTЗапрос();
КонецПроцедуры
&НаСервере
Процедура ОтправитьPOSTЗапрос()
// 1. Подготовка данных для отправки (JSON)
ПередаваемыеДанные = Новый Структура;
ПередаваемыеДанные. Вставить("Имя", "Тест");
ПередаваемыеДанные. Вставить("Фамилия", "Тестов");
ПередаваемыеДанные. Вставить("Возраст", 45);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON. УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПередаваемыеДанные);
ТелоЗапросаJSON = ЗаписьJSON. Закрыть();
Сообщить("Отправляемый JSON: " + ТелоЗапросаJSON);
// 2. Параметры сервера и создание HTTPСоединения
// ВНИМАНИЕ: Замените ‘postman-echo. com’ на реальный хост вашего API
// Этот хост просто возвращает то, что вы ему отправили, удобно для тестирования
Хост = "postman-echo. com";
Порт = 443;
ПутьКРесурсу = "/post"; // Это эхо-эндпоинт, который вернет ваш POST-запрос
ИспользоватьHTTPS = Истина; // Почти всегда используйте HTTPS для безопасности
Соединение = Неопределено;
Попытка
Если ИспользоватьHTTPS Тогда
Соединение = Новый HTTPSСоединение(Хост, Порт);
Иначе
Соединение = Новый HTTPСоединение(Хост, Порт);
КонецЕсли;
Исключение
Сообщить("Ошибка создания HTTPСоединения: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// 3. Создание HTTPЗапроса
Запрос = Новый HTTPЗапрос(ПутьКРесурсу);
Запрос. УстановитьТелоИзСтроки(ТелоЗапросаJSON, КодировкаТекста. UTF8);
// Установка заголовков
Запрос. Заголовки. Вставить("Content-Type", "application/json; charset=utf-8");
Запрос. Заголовки. Вставить("Accept", "application/json");
// Можно добавить другие заголовки, например для авторизации
// Запрос. Заголовки. Вставить("Authorization", "Bearer ВашТокен");
// 4. Отправка запроса и получение ответа
Ответ = Неопределено;
Попытка
Ответ = Соединение. Отправить(Запрос);
Если Ответ. КодСостояния = 200 Тогда
Сообщить("Запрос успешно отправлен. Код состояния: " + Ответ. КодСостояния);
ТелоОтвета = Ответ. ПолучитьТелоКакСтроку(КодировкаТекста. UTF8);
Сообщить("Получен ответ: " + ТелоОтвета);
// Пример разбора JSON ответа
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON. УстановитьСтроку(ТелоОтвета);
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
Сообщить("Разобранные данные ответа: " + ДанныеОтвета);
Исключение
Сообщить("Не удалось разобрать ответ как JSON: " + ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Ошибка при отправке запроса. Код состояния: " + Ответ. КодСостояния);
Сообщить("Тело ответа с ошибкой: " + Ответ. ПолучитьТелоКакСтроку(КодировкаТекста. UTF8));
Сообщить("Заголовки ответа с ошибкой: " + Ответ. Заголовки);
КонецЕсли;
Исключение
Сообщить("Произошла ошибка при выполнении HTTP-запроса: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Важные моменты и советы:
HTTPS (порт 443): Всегда, когда это возможно, используйте HTTPS для безопасности. Если у вас возникают проблемы с сертификатами (SSL/TLS), вы можете указать параметры для их игнорирования в конструкторе HTTPSСоединение, но это снижает безопасность и не рекомендуется для продуктивных систем. Кодировка: Убедитесь, что вы правильно указываете кодировку (КодировкаТекста. UTF8 — это наиболее универсальный вариант) как при формировании тела запроса, так и при получении ответа. Заголовки: Content-Type критически важен, так как он сообщает серверу, в каком формате вы отправляете данные. Accept сообщает серверу, какой формат ответа вы предпочитаете. Обработка ошибок: Всегда используйте блоки Попытка…Исключение для обработки возможных ошибок сети, таймаутов, проблем с сервером и т. д. Длинные запросы/ответы: Для очень больших объемов данных вместо УстановитьТелоИзСтроки и ПолучитьТелоКакСтроку используйте методы, работающие с файлами (УстановитьТелоИзФайла, ПолучитьТелоКакФайл). Таймауты: В конструкторе HTTPСоединение можно указать таймаут (в секундах) для соединения и для получения ответа, чтобы избежать бесконечного зависания. Прокси-сервер: Если ваша 1С работает за прокси-сервером, его настройки также можно указать в конструкторе HTTPСоединение. Отладка: Используйте онлайн-сервисы, такие как Postman Echo или RequestBin, для тестирования ваших запросов и анализа ответов сервера перед подключением к реальному API.
Отправка POST-запросов — это фундаментальный навык при интеграции 1С с внешними системами. Следуя этим рекомендациям, вы сможете эффективно настроить взаимодействие.