Как вызвать HTTP-сервис 1С без открытия браузера и консольного окна?

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

При интеграции 1С со сторонними приложениями часто возникает необходимость передать данные в 1С при наступлении определённого события. Для этого на стороне 1С публикуется HTTP-сервис, а стороннее приложение выполняет GET-запрос по указанному URL.

Однако на практике многие программы умеют лишь запускать внешние исполняемые файлы (.exe) с передачей параметров. Если в качестве такого файла указывать браузер (например, Internet Explorer или Google Chrome), при каждом срабатывании события у пользователя открывается окно браузера, что сильно мешает повседневной работе.

В этой статье мы разберем, как реализовать вызов HTTP-сервиса 1С в фоновом режиме, исключив появление окон браузера и консоли Windows.

Выясним причину проблемы

Разберем подробнее, почему возникают визуальные помехи для пользователя:

  1. Браузеры: Использование флагов фонового запуска (например, --silent-launch) в современных браузерах не предотвращает открытие окна, если в аргументах передаётся конкретный URL-адрес. Браузер принудительно отображает графический интерфейс для загрузки страницы.
  2. Утилита cURL: При прямом вызове curl.exe сторонним приложением Windows создаёт консольное окно. Даже если запрос выполняется за доли секунды, пользователь видит мелькание чёрного окна командной строки.
  3. Команда START /B: Ключ /b для командной строки предотвращает открытие нового окна консоли, но если сама командная строка (cmd.exe) инициализируется внешним приложением в обычном режиме, окно всё равно успевает отобразиться.

Способ 1. Использование консольной обёртки (StartCurl / HideExec)

Если стороннее приложение умеет только запускать файлы формата .exe с аргументами, самым простым и эффективным решением является применение утилиты-обёртки, созданной на WinForms или C++.

Такая утилита запускает процесс curl.exe без создания консольного окна (устанавливая флаг CREATE_NO_WINDOW при вызове системных функций Windows).

Рассмотрим порядок настройки:

  1. Скачиваем утилиту curl.exe и помещаем её в локальный каталог на компьютере пользователя.
  2. Используем исполняемый файл-загрузчик (например, StartCurl.exe), который принимает в качестве параметров путь к curl.exe и целевой URL.
  3. В настройках стороннего приложения прописываем вызов программы в следующем формате:

Пример строки запуска:

StartCurl.exe "C:\Program Files\curl\src\curl.exe" "http://localhost/BaseName/hs/ServiceName/FunctionName?Id1=111&Id2=222"

При таком подходе запрос успешно отправляется на HTTP-сервис 1С, а пользователь не замечает никаких графических или консольных окон.

Способ 2. Фоновый запуск через WScript.Shell и VBScript

Если в системе есть возможность вызывать исполняемый файл wscript.exe, входящий в состав Windows, то можно обойтись без сторонних .exe файлов. В отличие от cscript.exe, интерпретатор wscript.exe является GUI-приложением и не создаёт окно консоли.

Проанализируем ситуацию, когда необходимо вызвать HTTP-сервис прямо из скрипта или передать исполнение объекту WScript.Shell.

Пример вызова cURL через COM-объект WScript.Shell в фоновом режиме (значение флага 0 скрывает окно):


WshShell = Новый COMОбъект("WScript.Shell");
// Второй параметр 0 означает скрытое окно, третий параметр 1 — ожидание завершения
WshShell.Run("curl ""http://localhost/BaseName/hs/ServiceName/FunctionName?Id1=111&Id2=222""", 0, 1);

Также можно создать универсальный файл VBScript (например, send_request.vbs), выполняющий HTTP-запрос через встроенный объект Windows:


Set Arg = WScript.Arguments
If Arg.Count > 0 Then
    Set HTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    HTTP.open "GET", Arg(0), False
    HTTP.send
End If

Вызов такого скрипта из стороннего приложения выглядит следующим образом:

wscript.exe "C:\Scripts\send_request.vbs" "http://localhost/BaseName/hs/ServiceName/FunctionName?Id1=111&Id2=222"

Способ 3. Выполнение задачи через Планировщик заданий Windows

Разберем ещё один вариант, когда требуется максимальная изоляция вызова от сеанса пользователя. В Windows можно настроить задачу в Планировщике заданий (Task Scheduler):

  1. Создаём новую задачу в Планировщике заданий Windows и даём ей имя, например, Send1CRequest.
  2. В действиях задачи указываем запуск curl.exe с аргументом URL вашего сервиса 1С.
  3. В параметрах безопасности задачи выбираем запуск вне зависимости от входа пользователя или включаем фоновый режим.
  4. Стороннее приложение вызывает выполнение задачи через системную команду:

schtasks /run /tn "Send1CRequest"

Резюме

Для скрытого вызова HTTP-сервиса 1С без всплывающих окон наиболее удобными являются два варианта:

← На главную