В современной разработке взаимодействие 1С с внешними веб-сервисами практически всегда происходит по защищенному протоколу HTTPS. Однако начинающие разработчики часто сталкиваются с ситуацией, когда запрос, успешно работающий в браузере, возвращает в 1С ошибку 400 (Bad Request) или код 301 (Moved Permanently). В рамках данной статьи мы подробно разберем, как правильно сконфигурировать защищенное соединение и научим систему корректно обрабатывать перенаправления.
Для начала проанализируем базовый механизм создания HTTPСоединение. Главное отличие HTTPS от стандартного HTTP заключается в использовании SSL/TLS шифрования. В платформе 1С для включения этого режима используется специальный параметр в конструкторе соединения. Рассмотрим типовой пример настройки подключения к серверу:
// Создаем объект защищенного соединения
Защита = Новый ЗащищенноеСоединениеOpenSSL();
// Инициализируем соединение с указанием порта 443 и объекта защиты
Соединение = Новый HTTPСоединение("ya.ru", 443, , , , 30, Защита);
Обратим внимание на важные детали. Параметр ЗащищенноеСоединениеOpenSSL() без аргументов заставляет 1С использовать системное хранилище сертификатов операционной системы. Для Windows это означает обращение к сертификатам, установленным в системе, а для Linux может потребоваться дополнительная настройка путей к файлу cacert.pem.
Часто при попытке обратиться к корню сайта (например, "/") сервер возвращает код состояния 301. Это не ошибка в привычном понимании, а указание на то, что ресурс перемещен. Браузеры обрабатывают это незаметно для пользователя, автоматически переходя по новому адресу. В 1С объект HTTPСоединение не умеет автоматически следовать за перенаправлениями, поэтому нам необходимо реализовать этот механизм программно.
Когда сервер возвращает 301, он обязательно передает заголовок Location, в котором указан новый URI. Проанализируем, как извлечь этот адрес и выполнить повторный запрос.
Разберем по шагам создание универсального кода, который сможет получить содержимое страницы даже при наличии перенаправлений. Для разбора полученного URL удобно использовать методы типовых конфигураций (БСП), если они доступны, или реализовать парсинг строки самостоятельно.
&НаКлиенте
Процедура ПолучитьСтраницуСайтаСОбработкойРедиректа()
СерверСайта = "santehsmart.ru";
ПутьНаСервере = "/";
// Шаг 1: Первичная попытка соединения
Защита = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(СерверСайта, 443, , , , , Защита);
Запрос = Новый HTTPЗапрос(ПутьНаСервере);
Ответ = Соединение.Получить(Запрос);
// Шаг 2: Проверка кода состояния
Если Ответ.КодСостояния = 200 Тогда
Сообщить("Данные успешно получены!");
ТекстСтраницы = Ответ.ПолучитьТелоКакСтроку();
ИначеЕсли Ответ.КодСостояния = 301 Или Ответ.КодСостояния = 302 Тогда
// Выясним причину перенаправления и найдем новый адрес
НовыйАдрес = Ответ.Заголовки.Получить("Location");
Сообщить("Обнаружено перенаправление на: " + НовыйАдрес);
// Шаг 3: Разбор нового адреса (URI)
// Если используется БСП, можно применить ОбщегоНазначенияКлиентСервер.СтруктураURI
СтруктураURI = СпарситьАдрес(НовыйАдрес);
// Шаг 4: Повторное подключение по новому адресу
НовоеСоединение = Новый HTTPСоединение(СтруктураURI.Хост, СтруктураURI.Порт, , , , , Защита);
НовыйЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере);
ИтоговыйРезультат = НовоеСоединение.Получить(НовыйЗапрос);
Если ИтоговыйРезультат.КодСостояния = 200 Тогда
Сообщить("Данные получены после редиректа!");
ТекстСтраницы = ИтоговыйРезультат.ПолучитьТелоКакСтроку();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Рассмотрим дополнительные параметры, которые критически важны для стабильной работы обмена данными, но часто упускаются из виду:
Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/115.0.0.0 Safari/537.36");
Проанализируем ситуацию, когда сайт использует самоподписанный сертификат. В этом случае стандартный Новый ЗащищенноеСоединениеOpenSSL() выдаст ошибку аутентификации. Если вы уверены в безопасности источника, проверку сертификата можно настроить:
Для игнорирования проверки цепочки сертификатов (только в целях отладки!), можно использовать конструктор с параметрами, передав пустые ссылки на сертификаты удостоверяющих центров. Однако правильный путь — добавить сертификат сайта в доверенные на уровне операционной системы или передать его явно в объект защиты 1С.
Мы выяснили, что успешное подключение к HTTPS-сайту в 1С требует не только указания порта 443 и использования объекта ЗащищенноеСоединениеOpenSSL, но и готовности кода к обработке ответов сервера. Код 301 является стандартным поведением для многих веб-серверов (например, при переходе с http на https или с www на без-www), и ручная обработка заголовка Location — залог надежной работы вашего интеграционного решения.