Как настроить авторизованный HTTP-запрос для выгрузки заказов с Инфостарта в 1С

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

При автоматизации взаимодействия 1С с внешними веб-ресурсами, такими как портал Инфостарт, разработчики часто сталкиваются с необходимостью получения данных из закрытых разделов (например, списка заказов, данных о продажах или партнерской статистики). Основная сложность здесь заключается не в самом получении HTML-кода страницы, а в прохождении процедуры авторизации. Без корректных данных в заголовках запроса сервер вернет либо страницу входа, либо ошибку доступа.

В этой статье мы подробно разберем, как программно имитировать действия пользователя, настроить передачу авторизационных данных и корректно считать информацию с сайта, используя встроенные механизмы платформы 1С:Предприятие 8.3.

Шаг 1: Анализ процесса авторизации (инструментарий)

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

  1. Инструменты разработчика в браузере (F12): Откроем браузер (Chrome, Firefox или Edge), перейдем на страницу авторизации и нажмем F12. Во вкладке Network (Сеть) мы можем проанализировать каждый запрос. Нас интересуют заголовки (Headers) запроса к целевой странице.
  2. Специализированные прокси-отладчики: Программы типа Fiddler позволяют перехватывать все запросы между вашим компьютером и интернетом, предоставляя детальную информацию о куках (Cookies), заголовках и теле запроса.

Проанализируем ситуацию: когда вы авторизуетесь на сайте, сервер отправляет вашему браузеру специальные метки — Cookies. В последующих запросах браузер автоматически прикрепляет эти метки к заголовкам, и сервер «узнает» вас. Наша задача — повторить это поведение в 1С.

Шаг 2: Настройка защищенного соединения HTTPS

Современные ресурсы, включая Инфостарт, работают исключительно по протоколу HTTPS. Это означает, что при создании объекта HTTPСоединение в 1С мы обязаны использовать защищенное соединение. Если этого не сделать, запрос завершится ошибкой или будет сброшен сервером.

Разберем пример инициализации соединения:


// Определяем параметры сервера
Сервер = "infostart.ru";
// Для HTTPS обязательно создаем объект ЗащищенноеСоединениеOpenSSL
Защита = Новый ЗащищенноеСоединениеOpenSSL();

// Создаем соединение
Соединение = Новый HTTPСоединение(Сервер, , , , , 15, Защита);

Обратите внимание, что мы используем стандартный конструктор ЗащищенноеСоединениеOpenSSL(), который в большинстве случаев автоматически подбирает нужные сертификаты из хранилища операционной системы.

Шаг 3: Формирование запроса с Cookies

Как выяснилось в ходе обсуждения на форуме, для доступа к странице заказов на Инфостарте критически важно передать заголовок Cookie, содержащий параметры INFOSTART_SM_LOGIN и INFOSTART_SM_UIDH. Эти данные можно получить один раз вручную через F12 или реализовать механизм автоматического логина (об этом ниже).

Рассмотрим, как добавить эти данные в наш HTTPЗапрос:


// Путь к нужной странице
АдресСтраницы = "/profile/partner/authorship/";

// Создаем объект запроса
Запрос = Новый HTTPЗапрос(АдресСтраницы);

// Формируем строку кук (вставьте свои актуальные значения)
СтрокаКуки = "INFOSTART_SM_LOGIN=ВашЛогин; INFOSTART_SM_UIDH=ВашХешАвторизации;";

// Добавляем заголовки
Запрос.Заголовки.Вставить("Cookie", СтрокаКуки);
// Рекомендуется также добавить User-Agent, чтобы запрос выглядел как от браузера
Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36");

Использование User-Agent крайне важно. Некоторые сайты блокируют запросы, если в заголовке указано стандартное 1C+Enterprise, так как это явно указывает на работу робота.

Шаг 4: Выполнение запроса и получение результата

Теперь выполним сам запрос и проанализируем ответ сервера. Нам нужно убедиться, что код состояния равен 200 (ОК), что означает успешную загрузку страницы.


Попытка
    Ответ = Соединение.Получить(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        ТекстСтраницы = Ответ.ПолучитьТелоКакСтроку();
        // Здесь можно приступать к парсингу HTML
    ИначеЕсли Ответ.КодСостояния = 302 Тогда
        // Обработка редиректа, если сайт перенаправляет на страницу входа
        Сообщить("Требуется обновление авторизации (код 302)");
    Иначе
        Сообщить("Ошибка при получении данных: " + Ответ.КодСостояния);
    КонецЕсли;
Исключение
    Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
КонецПопытки;

Шаг 5: Автоматизация получения Cookies (программная авторизация)

Подставлять куки вручную неудобно, так как их срок действия ограничен. Чтобы автоматизировать процесс, мы можем сначала выполнить POST-запрос на адрес авторизации сайта.

Рассмотрим алгоритм действий:

  1. Выполняем POST запрос на /auth/ (или актуальный URL авторизации), передавая в теле запроса логин и пароль в формате application/x-www-form-urlencoded.
  2. Анализируем заголовки полученного ответа. Нас интересует заголовок Set-Cookie.
  3. Извлекаем значения кук и сохраняем их для использования в последующих GET запросах.

В 1С извлечение кук из ответа выглядит так:


КукиДляЗапросов = "";
Для Каждого Заголовок Из Ответ.Заголовки Цикл
    Если ВРег(Заголовок.Ключ) = "SET-COOKIE" Тогда
        // Накапливаем куки через точку с запятой
        КукиДляЗапросов = КукиДляЗапросов + Заголовок.Значение + "; ";
    КонецЕсли;
КонецЦикла;

Шаг 6: Парсинг полученных данных

Когда HTML-код страницы "Мои заказы" уже находится в переменной ТекстСтраницы, возникает вопрос: как вытащить оттуда полезную информацию? Рассмотрим три подхода:

  1. Регулярные выражения: Подходит для простого поиска конкретных значений (например, номеров заказов). В новых версиях платформы 8.3 доступна функция СтрПодобнаПоРегулярномуВыражению.
  2. Объект ЧтениеHTML: Позволяет последовательно обходить дерево документа. Это более "правильный" способ с точки зрения платформы 1С.
  3. Использование DOM через COM-объект: Если работа ведется в Windows, можно использовать HTMLFile. Это позволяет обращаться к элементам страницы по именам классов или идентификаторам, что делает код устойчивым к мелким изменениям верстки.

Пример использования HTMLFile для парсинга:


HTMLДокумент = Новый COMОбъект("HTMLFile");
HTMLДокумент.write(ТекстСтраницы);

// Получаем все таблицы на странице
Таблицы = HTMLДокумент.getElementsByTagName("table");
// Перебираем строки таблицы заказов
// (Код зависит от структуры конкретной страницы)

Рекомендации по стабильной работе

Проанализировав ситуацию, мы можем выделить несколько советов для обеспечения надежной выгрузки:

Таким образом, мы выяснили, что ключевым моментом в программной выгрузке заказов является правильное управление заголовками HTTP и использование защищенного соединения. Реализовав один раз механизм авторизации, вы сможете автоматизировать сбор любой статистики с портала непосредственно в вашу базу 1С.

← На главную