Почему не работает HTTP GET-запрос в 1С и как это исправить

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

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

1. Анализ базового кода GET-запроса

Рассмотрим стандартный пример получения файла или картинки по протоколу HTTP средствами платформы 1С:


Соединение = Новый HTTPСоединение("thumb7.shutterstock.com", 80);

// Формируем GET-запрос к конкретному ресурсу
Запрос = Новый HTTPЗапрос("/display_pic_with_logo/1014806/270790184/stock-photo-summer-holidays-background-sea-background-270790184.jpg");

// Отправляем запрос
Результат = Соединение.Получить(Запрос);

// Сохраняем полученные двоичные данные в файл
ДвоичныеДанные = Результат.ПолучитьТелоКакДвоичныеДанные();
ДвоичныеДанные.Записать("C:\TEMP\image.jpg");

В нормальных условиях этот код корректно возвращает ответ сервера. Если же на строчке с методом Получить() возникает сбой соединения, проанализируем возможные блокирующие факторы.

2. Настройки прокси-сервера и сетевого экрана

Самая распространенная причина, почему браузер работает, а 1С — нет, заключается в разнице сетевых контекстов:

  1. Настройки прокси-сервера в платформе: Браузер может автоматически использовать параметры системного прокси или настройки доменной политики. Для объекта HTTPСоединение параметры прокси необходимо передавать явно через объект ЗащищенноеСоединениеOpenSSL или специализированные параметры конструктора HTTPПрокси.
  2. Контекст выполнения (Клиент/Сервер): Если код исполняется на сервере 1С, сетевой запрос отправляется от имени служебного пользователя ОС (например, USR1CV8). У этого пользователя могут отсутствовать права на выход в интернет через брандмауэр или корпоративный прокси. Выяснить это можно, проверив настройки прокси под соответствующей учетной записью или прописав их системно в файле конфигурации inetcfg.xml.
  3. Брандмауэр (Firewall): Сетевой экран может блокировать исходящие соединения конкретного исполняемого файла 1cv8.exe или 1cv8s.exe, пропуская при этом трафик браузера.

3. Переход на защищенное соединение (HTTPS)

Многие современные сторонние сервисы автоматически отклоняют или перенаправляют незащищенные HTTP-запросы (порт 80) на HTTPS (порт 443). Если веб-сервер требует защищенного протокола, инициализацию соединения следует изменить:


// Создаем объект защищенного соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

// Подключаемся по порту 443 с использованием защищенного соединения
Соединение = Новый HTTPСоединение("thumb7.shutterstock.com", 443, , , , , ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("/display_pic_with_logo/1014806/270790184/stock-photo-summer-holidays-background-sea-background-270790184.jpg");

Результат = Соединение.Получить(Запрос);

4. Подмена заголовка User-Agent

Некоторые веб-серверы и сети доставки контента (CDN) блокируют запросы, если в заголовке User-Agent указана идентификация 1С. Чтобы сервер воспринимал запрос как стандартный браузерный, подставим соответствующий заголовок в HTTPЗапрос:


Запрос = Новый HTTPЗапрос("/path/to/resource");
Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36");

5. Особенности релиза платформы 1С

Если настройки сети проверены, HTTPS настроен, но соединение по-прежнему сбрасывается, причина может заключаться в некорректной работе сетевого стека конкретного релиза платформы 1С. В разных версиях платформы используются разборки библиотек OpenSSL и систем взаимодействия с сетью. На практике встречаются ситуативные ошибки платформы, при которых один и тот же сетевой код не работает на определенных технологических релизах (например, 8.3.10.2561), но стабильно функционирует на соседних версиях (например, 8.3.9.2033 или более свежих сборках 8.3.2x).

В случае неподтверждаемых сетевых ошибок рекомендуется протестировать выполнение кода на альтернативном релизе платформы или обновить её до актуального технологического дистрибутива.

← На главную