Общие сведения
Надёжность и безопасность
Покупка лицензии
Начало работы
Проекты
Концепции
Компоненты
Инструкции
Задачи
Финансы
Ресурсы
Таймшиты
Клиенты
Вики
Затраты
Отчёты и аналитика
Типы отчётов
Использование отчётов
Группировка данных источника
Группировка данных в отчёте
Типы виджетов
Общие отчёты и шаблоны
Настройка отчёта
Экспорт отчётов
Пользовательские настройки отчёта
Вычисляемые поля
Особые колонки отчётов с временными рядами
Использование панелей мониторинга
Публикация панелей
Панели сущностей
Фильтры источников данных
Отчёты по сущностям
FAQ
Настройка и администрирование
Типовой порядок настройки системы
Интеграция с Mattermost
Язык формул и выражений
Язык шаблонов
API
Общие сведения
Аутентификация
Примеры использования API
Справочник API
Reporting API
Рекомендации по работе с Reporting API
Ограничения
Timetta MCP Server
On-premises
История изменений
Термины и определения

SafeHttpClient

Обновлено: 13.03.2026

SafeHttpClient — безопасная обёртка над HttpClient, предназначенная для выполнения HTTP-запросов из динамического кода.

Класс используется в обработчиках платформы, например:

  • CustomHooks;
  • ScheduledJobHandler;
  • LifecycleRoleResolver.

Он предоставляет защищённый механизм для интеграции с внешними системами. Клиент ограничивает небезопасные сетевые операции и предотвращает доступ к внутренним ресурсам инфраструктуры.

Экземпляр клиента можно получить через контекст:

var http = context.GetHttpClient();

Основные ограничения безопасности

SafeHttpClient применяет ряд ограничений для предотвращения небезопасных сетевых запросов.

Разрешённые схемы

Поддерживаются только схемы:

  • http;
  • https.

Использование других схем URL запрещено.

Ограничение количества запросов

Для каждого URL действует ограничение частоты запросов. Параметры ограничения:

  1. Максимум 10 запросов.
  2. За 1 минуту.
  3. Для одного URL.

Если лимит превышен, будет выброшено исключение:

Rate limit exceeded

Интерфейс

Основные методы клиента:

public class SafeHttpClient : IDisposable
{
    Task<string> GetStringAsync(string url);

    Task<HttpResponseMessage> SendAsync(HttpRequestMessage request);
}

GetStringAsync

Task<string> GetStringAsync(string url)

Отправляет HTTP GET-запрос и возвращает тело ответа в виде строки.

Перед выполнением запроса клиент проверяет:

  • корректность URL;
  • допустимость схемы;
  • что адрес не является приватным;
  • лимит запросов.

Если сервер возвращает код ошибки, будет выброшено исключение.

SendAsync

Task<HttpResponseMessage> SendAsync(HttpRequestMessage request)

Отправляет произвольный HTTP-запрос. Метод поддерживает:

  • GET;
  • POST;
  • PUT;
  • PATCH;
  • DELETE;
  • другие HTTP-методы.

Перед отправкой запроса выполняются те же проверки безопасности, что и в GetStringAsync.

Если ответ сервера содержит код ошибки, метод вызывает EnsureSuccessStatusCode() и генерирует исключение.

Примеры

GET-запрос

var http = context.GetHttpClient();

var response = await http.GetStringAsync(
    "https://api.example.com/projects"
);

await context.Log("Получен ответ от API");

POST-запрос

var http = context.GetHttpClient();

var request = new HttpRequestMessage(
    HttpMethod.Post,
    "https://api.example.com/projects"
);

request.Content = JsonContent.Create(new
{
    name = "Test project"
});

var response = await http.SendAsync(request);

Освобождение ресурсов

SafeHttpClient реализует IDisposable. Однако при использовании клиента через context.GetHttpClient() освобождение ресурсов выполняется автоматически платформой.

Рекомендации

  • Используйте SafeHttpClient вместо обычного HttpClient в динамическом коде.
  • Для интеграций выполняйте запросы только к публичным API.
  • Обрабатывайте возможные исключения сетевых операций.
  • Не выполняйте большое количество запросов к одному URL подряд, чтобы избежать ограничения rate limit.
Предыдущая
 IContextEntityService
Следующая
NotificationService 

Содержание

Основные ограничения безопасности Разрешённые схемы Ограничение количества запросов Интерфейс GetStringAsync SendAsync Примеры GET-запрос POST-запрос Освобождение ресурсов Рекомендации
Спросить ИИ Получить ответ по материалам документации
Введите запрос для поиска по документации
Ничего не найдено, уточните запрос
AI

Похоже, вам удобнее русский язык. Перейти на русскую версию?