Как исправить ошибку 403 Forbidden при выполнении GET и POST запросов из 1С к API ФССП?

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

При интеграции 1С с внешними веб-сервисами (в частности, с API Банка данных исполнительных производств ФССП России) разработчики часто сталкиваются с ошибкой ответа сервера 403 Forbidden (Доступ запрещен). При этом сам ключ доступа (токен) может быть полностью валидным, а адрес запроса — сформирован по официальной документации.

В этой статье мы подробно проанализируем причины возникновения ошибки 403 при работе с API ФССП и разберем практические способы её решения.

Выясним причины возникновения ошибки 403

Ошибка 403 при вызове HTTP-запросов из платформы 1С обычно обусловлена следующими факторами:

  1. Блокировка по заголовку User-Agent: Платформа 1С при отправке запросов через объект HTTPСоединение по умолчанию подставляет специфический заголовок User-Agent. Серверы безопасности и WAF (Web Application Firewall) базы данных ФССП отсекают такие запросы как автоматизированные бот-системы.
  2. Передача маркера последовательности байтов (BOM): При вызове метода УстановитьТелоИзСтроки для POST-запросов 1С может записывать символ BOM в начало строки UTF-8. Веб-сервер API не может распарсить такой JSON и отклоняет обработку.
  3. Использование тела в GET-запросах: Метод GET по стандарту HTTP не должен содержать тело запроса. Если передавать поисковые параметры в теле HTTPЗапрос при методе GET, платформа 1С их отбрасывает, и сервер возвращает ошибку авторизации или недостатка параметров.

Способ 1. Обход проблемы с помощью COM-объекта WinHttp.WinHttpRequest

Наиболее быстрый и простой способ обойти блокировку по системному заголовку на операционных системах Windows — использование Windows HTTP Services через COM-интерфейс. В данном случае запросы отправляются от имени стандартной сетевой библиотеки ОС.

Рассмотрим пример выполнения GET-запроса для поиска физического лица:


WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2, "utf-8"); // Установка кодировки ответа

// Формируем URL с параметрами поиска и токеном
URLЗапроса = "https://api-ip.fssprus.ru/api/v1.0/search/physical?token=ZHtMJ2L0GOE31®ion=0&firstname=КИРИЛЛ&secondname=ИГОРЕВИЧ&lastname=МИТРОФАНОВ&birthdate=08.04.1981";

WinHttp.Open("GET", URLЗапроса, Ложь);
WinHttp.Send();

РезультатСтр = WinHttp.ResponseText();

Преимущество метода: Запрос успешно проходит фильтрацию на стороне ФССП без необходимости тонкой настройки заголовков.

Ограничение: COM-объекты работают исключительно в среде Windows. Если сервер приложений 1С развернут на Linux, данный вариант вызовет ошибку выполнения.

Способ 2. Настройка штатных объектов 1С (HTTPСоединение и HTTPЗапрос)

Для создания кроссплатформенного кода, работающего как на Windows, так и на Linux, необходимо использовать встроенные объекты 1С HTTPСоединение и HTTPЗапрос, корректно переопределив служебные заголовки.

Реализация GET-запроса:

Передаем все параметры поиска и токен строго в строке URL, а также подменяем User-Agent на значение стандартного браузера.


АдресСервиса = "api-ip.fssprus.ru";
// Все параметры кодируются и передаются в URL
СтрокаПараметров = "?token=ZHtMJ2L0GOE3®ion=0&firstname=%D0%9A%D0%98%D0%A0%D0%98%D0%9B%D0%9B&secondname=%D0%98%D0%93%D0%9E%D0%A0%D0%95%D0%92%D0%98%D0%A7&lastname=%D0%9C%D0%98%D0%A2%D0%A0%D0%9E%D0%A4%D0%90%D0%9D%D0%9E%D0%92&birthdate=08.04.1981";
АдресРесурса = "/api/v1.0/search/physical" + СтрокаПараметров;

HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
HTTPЗапрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");

HTTPСоединение = Новый HTTPСоединение(АдресСервиса, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
Ответ = HTTPСоединение.Получить(HTTPЗапрос);

Если Ответ.КодСостояния = 200 Тогда
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
Иначе
    Сообщить("Ошибка запроса: " + Ответ.КодСостояния);
КонецЕсли;

Реализация POST-запроса (групповой поиск):

При отправке групповых запросов методом POST обязательно отключаем запись метки BOM и явно указываем кодировку UTF-8 в заголовках:


АдресСервиса = "api-ip.fssprus.ru";
АдресРесурса = "/api/v1.0/search/group";

// Формируем корректную JSON-строку без лишних экранирующих символов
СтрокаJSON = "{
|  ""token"": ""ZHtMJ2L0GOE3"",
|  ""request"": [
|    {
|      ""type"": 1,
|      ""params"": {
|        ""firstname"": ""КИРИЛЛ"",
|        ""lastname"": ""МИТРОФАНОВ"",
|        ""region"": ""0""
|      }
|    }
|  ]
|}";

HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
HTTPЗапрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");

// Отключаем BOM с помощью ИспользованиеBOM.НеИспользовать
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеBOM.НеИспользовать);

HTTPСоединение = Новый HTTPСоединение(АдресСервиса, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);

ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();

Подведем итоги

Чтобы избежать ошибки 403 při взаимодействии с сервисами ФССП:

← На главную