Разработка и Конфигурация · 9 мин
Как сделать GET-запрос в 1С
Как выполнить GET-запрос в 1С через HTTPСоединение: код, параметры, заголовки, обработка ответа, типичные ошибки и проверка результата.
GET-запрос в 1С выполняется через встроенный объект HTTPСоединение и объект HTTPЗапрос. Это стандартный механизм платформы, который не требует внешних компонентов и работает как на толстом, так и на тонком клиенте, а также на сервере. Чаще всего GET-запросы используются для обращения к REST API внешних сервисов: получение курсов валют, статусов доставки, данных из CRM или проверки контрагентов.
Минимальный сценарий состоит из трёх шагов: создать соединение с сервером, сформировать объект запроса с адресом ресурса и вызвать метод Получить(). Результат возвращается в виде объекта HTTPОтвет, из которого читают код состояния и тело ответа. Ниже разобран полный рабочий пример, варианты с параметрами и авторизацией, а также типовые ошибки, из-за которых запрос не проходит.
Базовый пример GET-запроса
Простейший вариант — обращение к открытому API без авторизации. В примере ниже выполняется запрос к тестовому сервису и читается ответ в виде строки.
Процедура ВыполнитьGETЗапрос()
Соединение = Новый HTTPСоединение("jsonplaceholder.typicode.com", 443, , , , ,
Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/posts/1");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
Сообщить(ТелоОтвета);
Иначе
Сообщить("Ошибка: " + Ответ.КодСостояния);
КонецЕсли;
КонецПроцедуры
Код состояния 200 означает успешное выполнение. Любой другой код — 400, 401, 404, 500 — нужно обрабатывать отдельно, иначе программа попытается разобрать тело ошибки как корректные данные. Тело ответа читается методом ПолучитьТелоКакСтроку() для текстовых данных (JSON, XML) или ПолучитьТелоКакДвоичныеДанные() для файлов.
- 1Создайте объект HTTPСоединение с указанием хоста, порта и защищённого соединения для HTTPS
- 2Сформируйте объект HTTPЗапрос с адресом ресурса и нужными заголовками
- 3Вызовите метод Получить() и сохраните результат в переменную типа HTTPОтвет
- 4Проверьте код состояния ответа перед обработкой тела
- 5Прочитайте тело ответа и разберите данные (JSON, XML или текст)
Передача параметров в строке запроса
Параметры GET-запроса передаются прямо в адресе ресурса после знака вопроса, в формате ключ=значение, разделённые амперсандом. В 1С адрес формируется обычной конкатенацией строк.
Параметры = "?userId=5&status=completed";
Запрос = Новый HTTPЗапрос("/todos" + Параметры);
Ответ = Соединение.Получить(Запрос);
Если значения параметров содержат кириллицу, пробелы или спецсимволы, их нужно закодировать. Используйте функцию КодироватьСтроку() с параметром СпособКодированияСтроки.КодировкаURL, иначе сервер может вернуть ошибку 400 или неправильно интерпретировать значение.
ЗначениеПараметра = КодироватьСтроку("Москва и область",
СпособКодированияСтроки.КодировкаURL);
Запрос = Новый HTTPЗапрос("/search?city=" + ЗначениеПараметра);
Заголовки и авторизация
Многие API требуют заголовки: токен авторизации, указание формата ответа, идентификатор клиента. Заголовки задаются через свойство Заголовки объекта HTTPЗапрос — это соответствие, куда добавляются пары «имя — значение».
Запрос = Новый HTTPЗапрос("/api/v1/data");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Запрос.Заголовки.Вставить("Accept", "application/json");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Для Basic-авторизации логин и пароль можно передать прямо в конструктор HTTPСоединение — третьим и четвёртым параметрами. Для Bearer-токенов и API-ключей используйте заголовок Authorization или тот заголовок, который требует документация конкретного сервиса (например, X-API-Key).
Разбор ответа в формате JSON
Большинство современных API возвращают JSON. В 1С для разбора есть объект ЧтениеJSON в связке с функцией ПрочитатьJSON(), которая преобразует текст в структуру или соответствие.
Если Ответ.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(ЧтениеJSON); // Соответствие
ЧтениеJSON.Закрыть();
Сообщить(Данные["title"]);
КонецЕсли;
Если вторым параметром ПрочитатьJSON(ЧтениеJSON, Истина) передать признак «в соответствие», результат будет объектом типа Соответствие — это удобно при динамических ключах. Для фиксированной структуры ответа можно читать в Структуру и обращаться к полям через точку.
Перед разбором JSON полезно временно вывести тело ответа через Сообщить() или записать в файл. Структура реального ответа часто отличается от примеров в документации: поля вложены глубже, массивы приходят пустыми, а нужное значение лежит внутри объекта data.
Обработка ошибок и проверка результата
Сетевые вызовы нестабильны по своей природе: сервер может не отвечать, DNS — не резолвиться, сертификат — оказаться просроченным. Оборачивайте вызов в попытку/исключение и задавайте таймаут, чтобы фоновое задание или сеанс пользователя не зависали надолго.
Попытка
Соединение = Новый HTTPСоединение("api.example.com", 443, , , , 30,
Новый ЗащищенноеСоединениеOpenSSL());
Ответ = Соединение.Получить(Новый HTTPЗапрос("/status"));
Исключение
ЗаписьЖурналаРегистрации("HTTP-запрос", УровеньЖурналаРегистрации.Ошибка, , ,
ОписаниеОшибки());
Возврат;
КонецПопытки;
Шестой параметр конструктора — таймаут в секундах. Без него платформа использует значение по умолчанию, которое может быть слишком большим для интерактивных сценариев. Ошибки записывайте в журнал регистрации: это позволит потом понять, что именно пошло не так, без повторного запуска под отладчиком.
Как проверить результат
200 или другой ожидаемый код 2xx
4xx — ошибка запроса или авторизации, 5xx — сбой на стороне сервера
Валидный JSON/XML с ожидаемыми полями
HTML-страница ошибки или пустая строка
Запрос завершается в пределах заданного таймаута
Сеанс зависает или падает по таймауту
Типичные ошибки при выполнении GET-запросов
Большинство проблем при первой настройке сводится к нескольким повторяющимся причинам. Их стоит проверить в первую очередь, прежде чем искать ошибку в логике кода.
Отдельная частая ситуация — запрос работает из браузера, но не из 1С. Причины: корпоративный прокси (его нужно указать в параметрах HTTPСоединение через объект ИнтернетПрокси), блокировка по User-Agent на стороне сервиса или устаревшая версия TLS, которую не поддерживает сервер.
Как выбрать действие
Частые вопросы
Чем GET-запрос отличается от POST-запроса в 1С?
GET предназначен для получения данных и передаёт параметры в строке адреса, тело запроса обычно пустое. POST отправляет данные в теле запроса и используется для создания или изменения данных на сервере — в 1С для него вызывается метод ОтправитьДляОбработки() вместо Получить().
Можно ли выполнить GET-запрос на тонком клиенте?
Технически объект HTTPСоединение доступен и на клиенте, но правильнее выполнять внешние запросы на сервере через серверную процедуру. На клиентских машинах может не быть доступа в интернет, действовать ограничения прокси или антивируса, а токены и пароли в клиентском коде легче скомпрометировать.
Почему запрос возвращает ошибку сертификата?
Обычно причина в том, что сервер использует сертификат, которому платформа не доверяет, или устаревшую версию TLS. Проверьте актуальность версии платформы 1С и корневых сертификатов в операционной системе. Отключать проверку сертификата в рабочей базе небезопасно — это открывает путь к перехвату данных.
Как скачать файл через GET-запрос?
Используйте метод Получить() с двумя параметрами: объект запроса и имя файла для сохранения — Соединение.Получить(Запрос, "C:\temp\file.pdf"). Либо прочитайте тело через ПолучитьТелоКакДвоичныеДанные() и запишите его методом Записать(). Для больших файлов первый вариант предпочтительнее, так как не загружает всё содержимое в память.
Как отладить запрос, если сервис возвращает ошибку?
Зафиксируйте три вещи: точный адрес ресурса с параметрами, все отправленные заголовки и полный текст ответа с кодом состояния. Затем повторите тот же запрос в браузере или инструменте вроде Postman. Если там запрос проходит, а из 1С — нет, различие почти всегда в заголовках, кодировке параметров или настройках прокси.
Что важно запомнить
GET-запрос в 1С строится на трёх объектах: HTTPСоединение, HTTPЗапрос и HTTPОтвет. Для HTTPS обязательно защищённое соединение, параметры с кириллицей кодируйте через КодироватьСтроку, код состояния проверяйте до разбора тела, а весь вызов оборачивайте в попытку с таймаутом. Внешние запросы надёжнее выполнять на сервере, а ошибки фиксировать в журнале регистрации.