При интеграции 1С с веб-сервисами или загрузке файлов из интернета разработчики часто сталкиваются с ошибками соединений, блокировками по User-Agent или устаревшим движком отображения страниц. Попытка настроить эмуляцию версии Internet Explorer через системный реестр для методов передачи файлов часто не приносит результата. Разберем по шагам, как устроена работа со встроенным браузером в 1С, почему ключ реестра не влияет на скачивание файлов и какими штатными средствами платформы следует решать задачу загрузки данных.
Проанализируем механизм работы платформы при выполнении метода КопироватьФайл() и отображении веб-страниц:
FEATURE_BROWSER_EMULATION управляет исключительно компонентом отображения веб-страниц (Microsoft WebBrowser Control / MSHTML), который используется внутри элемента формы ПолеHTMLДокумента. Он определяет, в каком режиме совместимости (IE7, IE8, IE9, IE10 или IE11) будет отображаться верстка страницы.КопироватьФайл() выполняет базовый сетевой запрос через низкоуровневые библиотеки платформы, минуя компонент WebBrowser. Этот метод не использует движок рендеринга Internet Explorer, не позволяет настраивать HTTP-заголовки (включая User-Agent), обрабатывать авторизацию или сложные сценарии перенаправления (редиректы).Если перед нами стоит задача заставить элемент формы ПолеHTMLДокумента использовать стандарты современных версий IE (например, IE10 или IE11), необходимо учесть разрядность операционной системы и клиентского приложения 1С.
Рассмотрим нюансы внесения параметров в системный реестр Windows:
WOW6432Node:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATIONREG_DWORD, имя которого в точности совпадает с именем исполняемого файла процесса 1С:
1cv8.exe — для толстого клиента;
1cv8c.exe — для тонкого клиента;
rphost.exe — для кода, исполняемого на стороне сервера 1С или в фоновом задании.11001 (0x2AF9) — Internet Explorer 11 (принудительные стандарты Edge);
10001 (0x2711) — Internet Explorer 10 (принудительные стандарты IE10);
10000 (0x2710) — Internet Explorer 10 (в зависимости от директивы !DOCTYPE);
9999 (0x270F) — Internet Explorer 9;
8888 (0x22B8) — Internet Explorer 8.Для гарантированного скачивания файлов с веб-ресурсов, особенно при работе по защищенному протоколу HTTPS и при необходимости передачи пользовательского User-Agent, необходимо использовать специализированные объекты платформы HTTPСоединение и HTTPЗапрос.
Рассмотрим пример кода для загрузки файла с явным указанием необходимых заголовков:
// Настройка защищенного соединения для работы по протоколу HTTPS
Защита = Новый ЗащищенноеСоединениеOpenSSL();
// Инициализируем HTTP-соединение с сервером
СерверИсточник = "example.com";
Соединение = Новый HTTPСоединение(СерверИсточник, 443, , , , 30, Защита);
// Формируем запрос с указанием пути к файлу и нужного User-Agent
ОтносительныйПуть = "/files/document.pdf";
Запрос = Новый HTTPЗапрос(ОтносительныйПуть);
Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko");
// Указываем локальный путь для сохранения результата
ПутьДляСохранения = "C:\Temp\document.pdf";
// Выполняем загрузку файла напрямую на диск
Попытка
Ответ = Соединение.Получить(Запрос, ПутьДляСохранения);
Если Ответ.КодСостояния = 200 Тогда
// Файл успешно сохранен
Иначе
// Обработка ошибки сервера (например, 404 или 403)
КонецЕсли;
Исключение
// Обработка ошибок сетевого подключения
КонецПопытки;
Если сетевой запрос на сервере под управлением Windows Server 2008 R2 завершается ошибкой подключения к защищенному сайту, причина чаще всего заключается в отсутствии поддержки современного протокола TLS 1.2 в системных компонентах по умолчанию. Для устранения этой неполадки выполним следующие действия:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
DisabledByDefault = 0 (DWORD) и Enabled = 1 (DWORD).DefaultSecureProtocols в ветках интернет-настроек реестра позволяет использовать современные алгоритмы шифрования.В случаях, когда стандартных возможностей платформы недостаточно или требуется тонкая настройка параметров безопасности Windows, скачивание файла можно выполнить с помощью системного COM-объекта WinHttp.WinHttpRequest.5.1.
Посмотрим на пример реализации:
HTTP = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
HTTP.Open("GET", "https://example.com/files/document.pdf", Ложь);
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");
// Установка флагов поддержки протоколов TLS 1.1 и TLS 1.2 (0x00000800 | 0x00002000)
// Константа 2560 включает поддержку актуальных протоколов
HTTP.Option(9, 2560);
HTTP.Send();
Если HTTP.Status = 200 Тогда
Поток = Новый COMОбъект("ADODB.Stream");
Поток.Type = 1; // Двоичные данные (adTypeBinary)
Поток.Open();
Поток.Write(HTTP.ResponseBody);
Поток.SaveToFile("C:\Temp\document.pdf", 2); // adSaveCreateOverWrite
Поток.Close();
КонецЕсли;