Часто при попытке получить содержимое сайта через стандартные механизмы 1С мы сталкиваемся с тем, что вместо ожидаемого текста страницы получаем лишь технический HTML-код, «скелет» страницы или служебные данные. Давайте разберемся, почему так происходит и как добиться корректного получения данных.
Прежде чем приступать к исправлению кода, важно понять, с чем именно мы работаем. Когда мы используем HTTPСоединение и HTTPЗапрос, мы отправляем обычный GET-запрос к серверу. Однако современные веб-ресурсы устроены иначе:
User-Agent, сервер может вернуть заглушку или отказать в обслуживании.Первое, что нужно сделать — это сделать наш запрос максимально похожим на запрос от реального пользователя. Для этого мы должны правильно сформировать заголовки в объекте HTTPЗапрос. Рассмотрим пример того, как это реализовать:
Для начала создадим соответствие заголовков. Важно передать такие параметры, как Host, Content-Type и, что критически важно, User-Agent.
// Подготавливаем заголовки для имитации запроса из браузера
ЗаголовкиHTTP = Новый Соответствие;
ЗаголовкиHTTP.Вставить("Host", "moscow.magazin.ru");
ЗаголовкиHTTP.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36");
ЗаголовкиHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
// Создаем защищенное соединение
SSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение("moscow.magazin.ru", 443, , , , , SSL);
// Формируем запрос с учетом заголовков
HTTPЗапрос = Новый HTTPЗапрос("/product/100000/", ЗаголовкиHTTP);
// Выполняем запрос
ОтветHTTP = HTTPСоединение.Получить(HTTPЗапрос);
ТелоОтвета = ОтветHTTP.ПолучитьТелоКакСтроку();
Если добавление заголовков не помогло, необходимо проанализировать, что именно происходит при открытии страницы в обычном браузере. Для этого:
XHR или Fetch).Часто выясняется, что нужная информация подгружается отдельным запросом в формате JSON. Вместо того чтобы пытаться парсить сложный HTML, вы можете отправить запрос напрямую к этому внутреннему API и получить «чистые» данные, с которыми в 1С работать гораздо проще через ЧтениеJSON.
Если вы всё же получили нужный HTML-код, но не знаете, как извлечь из него текст, воспользуйтесь возможностями объекта htmlfile (для Windows-систем). Этот объект позволяет работать с DOM-моделью страницы так же, как это делает браузер:
// Пример использования COM-объекта для парсинга
Документ = Новый COMОбъект("htmlfile");
Документ.write(ТелоОтвета);
// Теперь через методы Документ.getElementsByTagName или Документ.getElementById
// можно извлечь конкретные значения из тегов страницы.
Подведем итог: если 1С получает не тот текст, что вы видите в браузере, скорее всего, данные формируются динамически. Начните с добавления заголовков User-Agent, затем проверьте сетевую активность через инструменты разработчика, чтобы найти прямой API-запрос к данным. Если же парсинг неизбежен, используйте htmlfile для удобной навигации по структуре полученного ответа.