Почему мобильное приложение не может подключиться к HTTP-сервису 1С:ERP?

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

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

1. Политика безопасности Android и протокол HTTPS

Одной из наиболее частых причин блокировки соединений является политика безопасности операционной системы Android. Начиная с версии Android 9 (API level 28), система по умолчанию блокирует все незашифрованные HTTP-запросы. Даже если вы явно указываете адрес, начинающийся с http://, Android может принудительно запрещать передачу данных в целях безопасности.

Что нужно сделать:

  1. Перейдите на использование протокола HTTPS. Это не только требование безопасности современных мобильных ОС, но и стандарт для передачи данных в публичных сетях.
  2. Если по техническим причинам переход на HTTPS невозможен, вам потребуется настроить networkSecurityConfig в манифесте вашего приложения, чтобы разрешить cleartext traffic (незашифрованный трафик) для конкретного домена.

2. Настройки веб-сервера и доступность сети

Часто публикация 1С настроена таким образом, что веб-сервер (Apache или IIS) ожидает подключения только из локальной сети. Когда вы тестируете запрос из мобильного приложения, находящегося в мобильной сети (3G/4G/LTE), запрос может физически не доходить до сервера из-за ограничений сетевой инфраструктуры или неверной настройки IP-адреса в публикации.

Как проверить:

  1. Убедитесь, что адрес, к которому обращается приложение, является внешним (публичным) IP-адресом или доменным именем, доступным из интернета.
  2. Проверьте файл конфигурации веб-сервера на наличие ограничений по IP. Если в настройках указан localhost или внутренний адрес 192.168.x.x, мобильное устройство из внешней сети не сможет разрешить этот адрес.

3. Проверка SSL-сертификатов

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

Как решить:

  1. Используйте доверенный сертификат от известного центра сертификации.
  2. В процессе отладки можно программно разрешить доверие ко всем сертификатам, однако помните, что это небезопасный метод, который нельзя использовать в промышленной эксплуатации (production).

4. Формирование заголовков запроса

Инструменты вроде Postman автоматически добавляют необходимые заголовки к запросу, в то время как при разработке мобильного приложения на 1С все заголовки необходимо формировать вручную. Если Content-Type не совпадает с тем, что ожидает HTTP-сервис (например, application/json или application/xml), сервер 1С может вернуть ошибку.

Рассмотрим пример формирования HTTP-запроса средствами платформы:


// Пример формирования заголовков и запроса
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить(\"Content-Type\", \"application/json\");
ЗаголовокHTTP.Вставить(\"Authorization\", \"Basic \" + Base64Строка(КодироватьСтроку(\"Логин:Пароль\")));

Соединение = Новый HTTPСоединение(\"ваш-сервер.com\", , , , , 60);
Запрос = Новый HTTPЗапрос(\"/название-сервиса/hs/api/data\", ЗаголовокHTTP);
Запрос.УстановитьТелоИзСтроки(ДанныеJSON);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
    // Обработка успешного ответа
КонецЕсли;

5. Рекомендации по диагностике

Чтобы точно определить, на каком этапе теряется запрос, выполним следующие шаги:

  1. Проверка прав: Убедитесь, что в файле AndroidManifest.xml вашего мобильного приложения явно прописано разрешение android.permission.INTERNET. Без этого ни один запрос не будет выполнен.
  2. Логи сервера: Изучите журналы работы веб-сервера (Apache или IIS). Если в логах нет записей о попытке соединения, значит, проблема на стороне сети (блокировка файрволом, неверный DNS или отсутствие доступа к серверу).
  3. Использование прокси-сервиса: Направьте запрос в тестовый сервис-посредник (например, RequestBin). Это позволит увидеть, как именно ваш запрос выглядит \"со стороны\", какие заголовки уходят и не искажаются ли данные в процессе отправки.
  4. Анализ HTTP-статуса: Всегда проверяйте свойство КодСостояния ответа. Коды 403 (доступ запрещен), 404 (ресурс не найден) или 406 (неверный тип контента) дают четкое понимание, что сервер 1С функционирует, но отклоняет ваш запрос из-за параметров.

Проанализировав эти пункты, вы сможете локализовать проблему. Чаще всего решение кроется либо в переходе на HTTPS, либо в корректном указании URL-адреса, который должен быть доступен не только внутри офисной сети, но и извне.

← На главную