Как исправить ошибку weird server reply при поиске файлов на FTP-сервере в 1С 8.3

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

При переходе на платформу 1С:Предприятие 8.3 (начиная с версии 8.3.8) многие разработчики сталкиваются с тем, что привычный код для работы с FTP-серверами начинает выдавать ошибку «weird server reply». Особенно часто это происходит при вызове метода НайтиФайлы. Ситуация осложняется тем, что на старых версиях платформы (например, 8.1) этот же код с тем же сервером работал безупречно. Выясним причину такого поведения и разберем по шагам способы решения этой проблемы.

Основная причина кроется в смене внутреннего движка сетевых протоколов. В 8.3 1С перешла с использования системной библиотеки Windows (Wininet) на кроссплатформенную библиотеку libcurl. Сообщение «weird server reply» — это стандартный ответ libcurl, который означает, что ответ FTP-сервера не соответствует ожидаемому протоколу или содержит некорректные данные.

Решение 1: Использование пассивного режима соединения

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

Рассмотрим, как правильно инициализировать FTPСоединение с явным указанием пассивного режима. Шестой параметр конструктора отвечает именно за это:


// Параметры: Сервер, Порт, Пользователь, Пароль, Прокси, ПассивныйРежим
Соединение = Новый FTPСоединение("ftp.myserver.com", , "admin", "password", , Истина);
Попытка
    МассивФайлов = Соединение.НайтиФайлы("/orders/", "*.zip");
Исключение
    Сообщить("Ошибка поиска файлов: " + ОписаниеОшибки());
КонецПопытки;

Как показывает практика, установка значения Истина в параметре пассивного режима решает проблему в 90% случаев, так как это меняет логику согласования портов и делает соединение более устойчивым к настройкам сетевых экранов.

Решение 2: Изменение маски поиска файлов

Посмотрим на особенности реализации метода НайтиФайлы. В версии 8.3 платформа может пытаться использовать современную команду MLSD для получения детализированного списка файлов вместо классической команды LIST. Если ваш FTP-сервер некорректно сообщает о поддержке расширений протокола, библиотека libcurl может получить «странный» ответ.

Если вы используете пустую строку в качестве маски, например НайтиФайлы(Каталог, ""), попробуйте заменить её на явную маску всех файлов:


// Вместо пустой строки используем маску
МассивФайлов = Соединение.НайтиФайлы(Каталог, "*"); 
// Или, если нужны все файлы с расширениями
МассивФайлов = Соединение.НайтиФайлы(Каталог, "*.*");

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

Решение 3: Ограничение количества соединений на сервере

Проанализируем ситуацию, когда ошибка возникает не всегда, а периодически. Это часто связано с настройками безопасности самого FTP-сервера. 1С при выполнении операций поиска может быстро открывать и закрывать управляющие соединения. Если на сервере установлено жесткое ограничение на количество одновременных подключений с одного IP-адреса, сервер может внезапно разорвать сессию или прислать пустой пакет.

Разберем необходимые действия для системного администратора:

  1. Проверьте настройки FTP-сервера (например, FileZilla Server или vsftpd).
  2. Найдите параметр «Limit number of IPs to connect to the ftp server» или «Max connections per IP».
  3. Если установлено низкое значение (например, 1 или 2), увеличьте его до 5–10 соединений.

Это позволит платформе 1С корректно завершать операции поиска, не натыкаясь на блокировки со стороны защиты сервера.

Решение 4: Проблемы с кодировкой и командой EPSV

Выясним более глубокие технические причины. Библиотека libcurl по умолчанию пытается использовать команду EPSV (Extended Passive Mode). Некоторые старые роутеры с функцией «FTP Inspection» некорректно модифицируют такие пакеты, что приводит к ошибке weird server reply.

Также стоит обратить внимание на кодировку. Если в именах файлов или путях присутствует кириллица, а сервер не поддерживает UTF-8 (команда OPTS UTF8 ON), ответ сервера может содержать битые символы. В этом случае 1С воспринимает поток данных как некорректный. Рекомендуется:

Решение 5: Влияние антивирусов и сетевых экранов

Часто причиной является «умная» фильтрация трафика. Антивирусное ПО или сетевые экраны (например, Cisco Fixup) могут анализировать FTP-трафик «на лету» и подменять IP-адреса внутри пакетов. Если такая модификация происходит с ошибкой (например, меняется длина пакета, но не пересчитывается контрольная сумма), клиент 1С выдаст ошибку протокола.

Для диагностики попробуйте временно отключить проверку сетевого трафика в антивирусе на стороне клиента или сервере. Если ошибка исчезнет, необходимо добавить исключение для процесса 1cv8.exe или настроить правила инспекции протоколов на сетевом оборудовании.

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

← На главную