Разберем ситуацию, с которой сталкиваются многие разработчики: при обращении к HTTP-сервису 1С из мобильного приложения на Android возникает ошибка соединения, хотя через браузер или сторонние инструменты типа Postman все запросы проходят успешно. Проанализируем основные причины такого поведения системы и пошагово разберем методы диагностики и решения.
Одной из наиболее частых причин блокировки соединений является политика безопасности операционной системы Android. Начиная с версии Android 9 (API level 28), система по умолчанию блокирует все незашифрованные HTTP-запросы. Даже если вы явно указываете адрес, начинающийся с http://, Android может принудительно запрещать передачу данных в целях безопасности.
Что нужно сделать:
HTTPS. Это не только требование безопасности современных мобильных ОС, но и стандарт для передачи данных в публичных сетях.HTTPS невозможен, вам потребуется настроить networkSecurityConfig в манифесте вашего приложения, чтобы разрешить cleartext traffic (незашифрованный трафик) для конкретного домена.Часто публикация 1С настроена таким образом, что веб-сервер (Apache или IIS) ожидает подключения только из локальной сети. Когда вы тестируете запрос из мобильного приложения, находящегося в мобильной сети (3G/4G/LTE), запрос может физически не доходить до сервера из-за ограничений сетевой инфраструктуры или неверной настройки IP-адреса в публикации.
Как проверить:
IP-адресом или доменным именем, доступным из интернета.IP. Если в настройках указан localhost или внутренний адрес 192.168.x.x, мобильное устройство из внешней сети не сможет разрешить этот адрес.При использовании HTTPS мобильные устройства проявляют повышенную строгость к валидности сертификатов. Если на сервере 1С установлен самоподписанный сертификат, мобильное приложение на Android будет блокировать соединение, считая его небезопасным.
Как решить:
Инструменты вроде 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 Тогда
// Обработка успешного ответа
КонецЕсли;
Чтобы точно определить, на каком этапе теряется запрос, выполним следующие шаги:
AndroidManifest.xml вашего мобильного приложения явно прописано разрешение android.permission.INTERNET. Без этого ни один запрос не будет выполнен.DNS или отсутствие доступа к серверу).HTTP-статуса: Всегда проверяйте свойство КодСостояния ответа. Коды 403 (доступ запрещен), 404 (ресурс не найден) или 406 (неверный тип контента) дают четкое понимание, что сервер 1С функционирует, но отклоняет ваш запрос из-за параметров.Проанализировав эти пункты, вы сможете локализовать проблему. Чаще всего решение кроется либо в переходе на HTTPS, либо в корректном указании URL-адреса, который должен быть доступен не только внутри офисной сети, но и извне.