Как просмотреть и отладить HTTP-запрос в 1С: подробное руководство

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При настройке интеграции 1С с внешними системами через HTTP-соединение программисты часто сталкиваются с ситуацией, когда сервер возвращает ошибку (например, 500 Internal Server Error или 400 Bad Request). Чтобы разобраться в причинах, необходимо увидеть "сырой" текст запроса — именно те данные, которые уходят "в провод". В 1С нет встроенной кнопки "Показать текст запроса", поэтому разберем по шагам все методы отладки: от исправления кода до использования внешних инструментов.

Анализируем структуру HTTP-соединения и адресацию

Первым делом проанализируем, правильно ли создается объект HTTPСоединение. Часто ошибка кроется в неверном разделении адреса сервера и пути к ресурсу. Рассмотрим типичную ошибку из практики:


// Ошибочный вариант
Сервер = "integration.e-queo.online/v3"; 
Соед = Новый HTTPСоединение(Сервер, , log, pas, , , Новый ЗащищенноеСоединениеOpenSSL);
Ресурс = "/users/sync";

В данном примере в переменную Сервер ошибочно включена часть пути /v3. Платформа 1С ожидает в конструкторе HTTPСоединение только имя хоста (FQDN) или IP-адрес. Выясним, как сделать правильно:


// Правильный вариант
Сервер = "integration.e-queo.online"; // Только домен
Ресурс = "/v3/users/sync";           // Весь путь, начиная с версии API
Соед = Новый HTTPСоединение(Сервер, , log, pas, , , Новый ЗащищенноеСоединениеOpenSSL);
Запр = Новый HTTPЗапрос(Ресурс);

Если указать путь в имени сервера, соединение может не установиться вовсе или вести себя непредсказуемо, так как DNS-резолвер не сможет определить адрес хоста.

Проверка тела запроса и типичные ошибки JSON

Выясним причину, по которой сервер может возвращать 500-ю ошибку. Часто это связано с невалидным или логически неверным JSON. Посмотрим на пример данных, которые вызывали проблему:


"partial_sync": "true",
"chief_sync": "true"

В данном случае значения true передаются как строки (в кавычках). Для многих API это критично, так как они ожидают системный булев тип. Правильный JSON должен выглядеть так:


"partial_sync": true,
"chief_sync": true

Чтобы не допускать таких ошибок при ручном формировании строки, крайне рекомендуем использовать встроенные средства платформы. Разберем, как правильно сериализовать данные в JSON:


ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("partial_sync", Истина); // Платформа сама сконвертирует в true без кавычек
ДанныеДляОтправки.Вставить("notify_users", Истина);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJS = ЗаписьJSON.Закрыть();

Запр.УстановитьТелоИзСтроки(СтрокаJS, "utf-8", ИспользованиеByteOrderMark.НеИспользовать);

Использование снифферов для перехвата трафика (Fiddler)

Если программный код кажется верным, но сервер всё равно выдает ошибку, нам нужно посмотреть на сформированные заголовки и тело запроса "глазами сервера". Для этого используются программы-прокси, такие как Fiddler или Charles Proxy.

Для того чтобы 1С направила трафик через Fiddler, необходимо настроить ИнтернетПрокси в коде. По умолчанию Fiddler слушает порт 8888 на локальном адресе 127.0.0.1. Проанализируем, как подключить прокси программно:


Прокси = Новый ИнтернетПрокси;
Прокси.Установить("http", "127.0.0.1", 8888);
Прокси.Установить("https", "127.0.0.1", 8888);

// Передаем объект прокси в конструктор соединения
Соед = Новый HTTPСоединение(Сервер, , , , Прокси, , Новый ЗащищенноеСоединениеOpenSSL);

Важный момент при работе с HTTPS: Поскольку 1С использует защищенное соединение, Fiddler будет подменять сертификат сервера своим собственным для расшифровки трафика. Чтобы 1С не разорвала соединение из-за ошибки безопасности, необходимо либо установить сертификат Fiddler в хранилище доверенных сертификатов ОС, либо временно отключить проверку сертификатов в 1С (только для целей отладки!).

Отладка через эхо-сервисы (Webhook.site)

Если установка стороннего ПО на сервер 1С невозможна (например, в облаке), воспользуемся методом "эхо-серверов". Рассмотрим этот процесс:

  1. Заходим на сервис типа Webhook.site или Postman Echo.
  2. Получаем уникальный URL (например, https://webhook.site/unique-id).
  3. В коде 1С временно меняем адрес сервера и ресурс на полученный URL.
  4. Выполняем запрос из 1С.
  5. В браузере на странице сервиса мгновенно появляется наш запрос со всеми заголовками (Authorization, Content-Type) и телом в исходном виде.

Это самый быстрый способ проверить, не теряется ли какой-то заголовок (например, Bearer токен) при формировании запроса платформой.

Настройка Технологического журнала для логгирования HTTP

Для продвинутой отладки на стороне сервера 1С:Предприятие можно настроить Технологический журнал. Это позволит сохранять все HTTP-запросы в текстовые файлы прямо на сервере. Для этого необходимо создать или отредактировать файл logcfg.xml в каталоге конфигов 1С.

Добавим событие HTTP в настройки ТЖ:


<event query="true">
    <eq property="Name" value="HTTP"/>
</event>

После этого платформа начнет записывать детали всех исходящих вызовов. Это особенно полезно, когда ошибка плавающая и проявляется только в фоновых заданиях на сервере.

Изучение детального ответа сервера

Не стоит забывать, что даже при ошибке 500 сервер часто присылает полезную информацию в теле ответа. Вместо того чтобы просто увидеть код ошибки, обязательно прочитаем содержимое тела ответа. Рассмотрим пример кода для анализа ошибок:


Ответ = Соед.ОтправитьДляОбработки(Запр);
Если Ответ.КодСостояния <> 200 Тогда
    ТекстОшибки = Ответ.ПолучитьТелоКакСтроку();
    Сообщить("Ошибка сервера (" + Ответ.КодСостояния + "): " + ТекстОшибки);
    // Часто там содержится JSON вида {"errors":[{"message":"Поле login обязательно"}]}
КонецЕсли;

Проанализировав таким образом ответ, мы можем сразу увидеть, какой именно параметр в JSON не прошел валидацию на стороне принимающего API.

Итоги и рекомендации

Подведем итог нашему исследованию. Для эффективной отладки HTTP-соединений в 1С придерживайтесь следующих правил:

Используя эти инструменты, мы сможем быстро найти и устранить любую причину некорректной работы интеграции.

← На главную