При попытке программного взаимодействия с современными веб-ресурсами из 1С, особенно с теми, которые предъявляют высокие требования к безопасности и актуальности клиентского программного обеспечения, разработчики нередко сталкиваются с ошибкой "Вы используете устаревший браузер". Рассмотрим подробно, почему возникает такая ситуация и как ее можно победить, используя средства платформы 1С:Предприятие.
Наш читатель столкнулся с этой проблемой при попытке открыть сайт РЖД https://cargolk.rzd.ru/ через объект HTTPСоединение в 1С версии 8.3.22.2239. Несмотря на то что в заголовках запроса был явно указан современный User-Agent, имитирующий актуальную версию Google Chrome, сервер РЖД все равно возвращал сообщение об устаревшем браузере. Давайте проанализируем его код и выясним причины такого поведения.
Соединение = Новый HTTPСоединение("cargolk.rzd.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Заголовки = Новый Соответствие;
Заголовки.Вставить("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36");
Запрос = Новый HTTPЗапрос("/");
Результат=Соединение.Получить(Запрос);
Сообщить("Нам вернули код (служебная инфо): " + Результат.КодСостояния);
тело_результата=Результат.ПолучитьТелоКакСтроку();
сообщить(тело_результата);
В этом коде мы видим стандартный подход к работе с HTTPСоединение: создание защищенного соединения через порт 443 с использованием ЗащищенноеСоединениеOpenSSL(), установка заголовка User-Agent и выполнение GET-запроса. Проблема в том, что современный веб-сервер, такой как у РЖД, использует гораздо более сложные механизмы для определения актуальности клиентского программного обеспечения, чем просто проверка строки User-Agent.
Чтобы понять, почему сервер РЖД отклоняет наш запрос, несмотря на подмену User-Agent, мы должны рассмотреть несколько ключевых аспектов современного веб-взаимодействия:
User-Agent давно уже не является надежным способом обмануть веб-сервер. Современные сайты используют гораздо более сложные методы для определения актуальности браузера, которые могут включать:
User-Agent, сервер может анализировать другие заголовки, такие как Accept, Accept-Language, Accept-Encoding, Sec-Fetch-Mode, Sec-Fetch-Site и многие другие, которые могут не соответствовать ожидаемым значениям современного браузера.
HTTPСоединение в 1С не является полноценным браузерным движком и не выполняет JavaScript.
HTTPСоединение не предоставляет большинство из этих данных, что также может служить сигналом для сервера о нестандартном клиенте.
HTTPСоединение в 1С: Объект HTTPСоединение в 1С предназначен для программного взаимодействия с веб-сервисами и выполнения HTTP/HTTPS-запросов, но он не является полноценным веб-браузером. Он не содержит движка для рендеринга HTML-страниц и выполнения JavaScript. Он скорее имитирует низкоуровневый HTTP-клиент. Соответственно, он не может пройти сложные проверки, которые ориентированы на полноценные браузеры с их развитыми возможностями.
С учетом вышеизложенных причин, мы можем предложить несколько подходов к решению проблемы:
Это, пожалуй, первое и самое важное действие. Как уже упоминалось, платформа 1С постоянно развивается. Обновление до самой последней стабильной версии (например, до версии 8.3.24 или более новой на момент чтения) может значительно улучшить ситуацию. Почему это помогает:
HTTPСоединение, которые повышают его совместимость с современными веб-серверами, например, в части формирования заголовков или обработки ответов.
Мы рекомендуем всегда использовать актуальную версию платформы, особенно при необходимости взаимодействия с внешними веб-сервисами.
Самый надежный и правильный способ программного взаимодействия с веб-ресурсом — это использование его официального Application Programming Interface (API). API специально разрабатываются для машинного взаимодействия и не предъявляют требований к "браузеру". Вместо этого они обычно требуют аутентификацию (ключи API, токены OAuth) и используют стандартизированные форматы данных (JSON, XML).
Наш автор уже искал такой API, но предложенный ему API РЖД (https://cargolk.rzd.ru/instructions/114) оказался предназначенным только для вагоноремонтных предприятий, а не для перевозчиков. Тем не менее, это не отменяет принципа: мы настоятельно рекомендуем продолжить поиск официального API для нужных функций на сайте РЖД или обратиться в их техническую поддержку. Внутри крупных порталов часто существуют скрытые или недокументированные REST API, которые используются самим сайтом для взаимодействия между его частями. Поиск таких API через анализ сетевых запросов браузера (вкладка "Сеть" или "Network" в инструментах разработчика) может дать результаты. Взаимодействие через такой API будет гораздо более стабильным и менее подвержен проблемам с "устаревшим браузером".
Если обновление платформы не помогает, и официального API нет, или он не подходит, мы можем рассмотреть более сложные решения:
conf.cfg или ключи командной строки для клиентского приложения. Например:
ForceTLS1_1: Принудительно использовать или включать поддержку TLS 1.1.ForceTLS1_2: Принудительно использовать или включать поддержку TLS 1.2.Эти параметры обычно указывают максимальную версию TLS, которую может использовать 1С. Например, /HttpsForceTLS1_2 для клиента. Однако, если сайт требует TLS 1.3, а платформа его не поддерживает или параметр указывает на более старую версию, это не поможет. Мы должны убедиться, что используемая версия платформы 1С поддерживает требуемую версию TLS, и что операционная система также имеет актуальные пакеты безопасности.
HTTPСоединение на работу через прокси-сервер. Прокси может взять на себя часть задач по согласованию протоколов или маршрутизации. Однако это не решит проблему, если сервер проверяет именно клиентские возможности браузера.
Проблема "Вы используете устаревший браузер" при работе с HTTPСоединение в 1С с современными веб-сайтами, такими как cargolk.rzd.ru, в первую очередь связана с неспособностью встроенного механизма 1С соответствовать всем требованиям современных веб-серверов в части протоколов безопасности (TLS) и сложным проверкам клиентского окружения (JavaScript, fingerprinting).
Мы настоятельно рекомендуем начать решение с обновления платформы 1С:Предприятие до самой актуальной версии. Это обеспечит поддержку современных протоколов TLS и потенциально улучшит работу встроенного HTTP-клиента. Параллельно, мы должны активно искать и использовать официальный API, который является наиболее правильным и надежным способом программного взаимодействия с веб-ресурсами. В случае отсутствия подходящего API или неудачи с обновлением платформы, можно рассмотреть более сложные варианты с внешними компонентами, но они требуют значительно больших усилий.
Помните, что платформа 1С:Предприятие в первую очередь предназначена для автоматизации учета и управления, а не для полноценного веб-серфинга или имитации браузера. Поэтому, для сложных веб-взаимодействий всегда приоритетнее использовать специально разработанные API.