HTTP/API Tester — небольшой универсальный HTTP-клиент внутри 1С:Предприятия. Он нужен для случаев, когда требуется быстро проверить внешний API или собственный HTTP-сервис именно из среды 1С, не создавая для каждой проверки временную обработку.
Что умеет обработка
- Методы: GET, POST, PUT, PATCH, DELETE.
- Адрес: HTTP и HTTPS, нестандартные порты, путь и параметры запроса.
- Заголовки: произвольный список, отдельное включение/отключение строк.
- Авторизация: без авторизации, Bearer Token и Basic Auth.
- Тело запроса: текст или JSON; если тело не нужно, его можно не задавать.
- Ответ: HTTP-код, статус, заголовки, время, размер, исходный текст и форматированный JSON.
- JSON: форматирование запроса и автоматическое форматирование корректного JSON-ответа.
- Диагностика: некорректный URL, ошибки DNS и соединения, таймауты и TLS.
Ответы 4xx и 5xx остаются обычными HTTP-ответами: можно посмотреть код и тело. Если до сервера вообще не удалось достучаться — например, из-за DNS, таймаута или TLS, — причина выводится отдельно на вкладке диагностики.
Пример: POST с JSON
Для POST/PUT/PATCH можно отправить обычный текст или JSON. Если Content-Type не задан вручную, обработка подставит его сама: для JSON — application/json; charset=utf-8, для текста — text/plain; charset=utf-8.
Как формируются заголовки и тело
В запрос попадают только включённые строки таблицы заголовков. Здесь же добавляются параметры авторизации и автоматический Content-Type.
Заголовки = Новый Соответствие;
Для Каждого СтрокаЗаголовка Из ЗаголовкиЗапроса Цикл
Если СтрокаЗаголовка.Использовать И НЕ ПустаяСтрока(СокрЛП(СтрокаЗаголовка.Имя)) Тогда
Заголовки.Вставить(СокрЛП(СтрокаЗаголовка.Имя), СтрокаЗаголовка.Значение);
КонецЕсли;
КонецЦикла;
Если ТипАвторизации = "Bearer" Тогда
Заголовки.Вставить("Authorization", "Bearer " + BearerToken);
ИначеЕсли ТипАвторизации = "Basic" Тогда
СтрокаАвторизации = BasicLogin + ":" + BasicPassword;
ДвоичныеДанныеАвторизации = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации, КодировкаТекста.UTF8);
СтрокаBase64 = Base64Строка(ДвоичныеДанныеАвторизации);
СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ПС, "");
СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ВК, "");
Заголовки.Вставить("Authorization", "Basic " + СтрокаBase64);
КонецЕсли;
Если НЕ ЕстьЗаголовок(Заголовки, "Content-Type") Тогда
Если ТипТела = "JSON" Тогда
Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
ИначеЕсли ТипТела = "Text" Тогда
Заголовки.Вставить("Content-Type", "text/plain; charset=utf-8");
КонецЕсли;
КонецЕсли;
HTTPЗапрос = Новый HTTPЗапрос(ПараметрыURL.Путь, Заголовки);
Если ТипТела <> "Нет" И НЕ ПустаяСтрока(ТелоЗапроса) Тогда
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Bearer Token и Basic Auth
Для типовых API предусмотрены два готовых режима авторизации. При Bearer обработка формирует заголовок Authorization: Bearer .... Для Basic Auth пара логин/пароль кодируется в Base64 и также передаётся через заголовок Authorization.
HTTP и HTTPS
URL разбирается на схему, хост, порт и путь. Если порт не задан, используются стандартные значения: 80 для HTTP и 443 для HTTPS. Для HTTPS создаётся защищённое соединение средствами платформы 1С.
ЗащищенноеСоединение = Неопределено;
Если ПараметрыURL.Схема = "https" Тогда
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
КонецЕсли;
Попытка
МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
Соединение = Новый HTTPСоединение(
ПараметрыURL.Хост,
ПараметрыURL.Порт,
,
,
,
ТаймаутСекунд,
ЗащищенноеСоединение);
HTTPОтвет = Соединение.ВызватьHTTPМетод(ВРег(МетодHTTP), HTTPЗапрос);
Что видно в ответе
После отправки обработки показывает HTTP-код, текстовый статус, время выполнения и размер тела. Отдельно доступны исходное тело, форматированный JSON, заголовки ответа и диагностика.
Разбор ответа
ВремяОтветаМс = МоментОкончания - МоментНачала;
КодОтвета = HTTPОтвет.КодСостояния;
СтатусОтвета = ТекстHTTPСтатуса(КодОтвета);
Попытка
ДвоичныеДанныеОтвета = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();
РазмерОтвета = ДвоичныеДанныеОтвета.Размер();
Исключение
РазмерОтвета = 0;
КонецПопытки;
Попытка
ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
Исключение
ТелоОтвета = "";
ТекстОшибки = "Не удалось прочитать тело ответа как текст: " + ОписаниеОшибки();
КонецПопытки;
Для Каждого ПараЗаголовка Из HTTPОтвет.Заголовки Цикл
НоваяСтрока = ЗаголовкиОтвета.Добавить();
НоваяСтрока.Имя = ПараЗаголовка.Ключ;
НоваяСтрока.Значение = ПараЗаголовка.Значение;
КонецЦикла;
РезультатФорматирования = ФорматироватьJSONБезИсключения(ТелоОтвета);
Если РезультатФорматирования.Успех Тогда
ТелоОтветаJSON = РезультатФорматирования.Текст;
КонецЕсли;
Если тело является корректным JSON, оно дополнительно форматируется для чтения. Если JSON повреждён или сервер вернул обычный текст, исходное тело при этом не теряется.
Функция ФорматироватьJSONБезИсключения(ТекстJSON)
Результат = Новый Структура("Успех,Текст,Ошибка", Ложь, "", "");
Если ПустаяСтрока(ТекстJSON) Тогда
Результат.Ошибка = "JSON пуст.";
Возврат Результат;
КонецЕсли;
Попытка
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(, Символы.Таб));
ЗаписатьJSON(Запись, Данные);
Результат.Текст = Запись.Закрыть();
Результат.Успех = Истина;
Исключение
Результат.Ошибка = ОписаниеОшибки();
КонецПопытки;
Возврат Результат;
КонецФункции
Ошибки соединения и таймауты
При работе с API полезно различать ответ сервера и ошибку соединения. Например, 404 Not Found — обычный HTTP-ответ: сервер доступен и вернул статус 404. Таймаут — другая ситуация: ответа за заданное время получить не удалось.
Обработка также диагностирует:
- пустой или некорректный URL;
- неподдерживаемую схему адреса;
- ошибку определения имени сервера;
- сервер отклонил соединение;
- SSL/TLS error.
Как пользоваться
- Открыть внешнюю обработку
HTTPAPITester.epf. - Выбрать HTTP-метод и указать URL.
- При необходимости добавить заголовки.
- Настроить Bearer или Basic Auth.
- Для POST/PUT/PATCH выбрать тип тела и заполнить текст или JSON.
- Нажать «Отправить».
- Посмотреть код, тело, JSON, заголовки ответа или вкладку диагностики.
Устанавливать обработку в конфигурацию не требуется: файл можно открыть как обычную внешнюю обработку. Кнопка «Очистить ответ» сбрасывает результат предыдущего запроса, не заставляя заново собирать параметры нового запроса.
Совместимость
Обработку проверяли на платформе 1С:Предприятие 8.5.1.1150 в Демонстрационном приложении «1С:Предприятие 8.5». Она не обращается к объектам конкретной прикладной конфигурации, поэтому её можно использовать как универсальный инструмент для проверки HTTP/API.
Что входит в архив
В HTTPAPITester.zip два файла:
HTTPAPITester.epf— сама обработка. Достаточно открыть её через «Файл → Открыть» и можно работать.mock_api.py— небольшой локальный тестовый сервер. Он пригодится, если хочется проверить запросы, заголовки, авторизацию, JSON, разные HTTP-статусы и таймауты без обращения к внешнему сервису. Для обычной работы обработки он не нужен.
Для запуска mock API нужен Python 3 без сторонних библиотек: python mock_api.py. После запуска можно проверить адрес http://127.0.0.1:19090/ping.
Код обработки открыт. При желании его можно посмотреть и доработать под свои задачи; если нужен просто готовый инструмент, достаточно распаковать архив и открыть HTTPAPITester.epf.
Вступайте в нашу телеграмм-группу Инфостарт