Сервер Indy's TIdHTTPProxyServer:Как фильтровать запросы?
Вопрос
Я использую TIdHTTPProxyServer для реализации простого HTTP-прокси, но теперь я хотел бы заблокировать некоторые соединения, если они соответствуют определенным URL-адресам.Какое событие и / или компонент лучше всего подходят для достижения этой цели?Документация Indy не слишком понятна.:(
Спасибо!
Решение
В качестве базового фильтра вы можете использовать обработчик событий OnHTTPBeforeCommand (который запускается перед отправкой команды на HTTP-сервер).
Ознакомьтесь со свойствами параметра контекста, которые вы найдете полезными:
Context.Command
Context.OutboundClient.Host
Context.OutboundClient.Port
Context.Document
Context.Headers
Я никогда не пытался остановить прохождение в это время, но держу пари, вы можете сделать это, просто создав исключение в этот момент, если вы определите, что есть соответствие правилу блокировки.
Другие советы
Компонент имеет событие «OnConnect», дважды щелкните его и добавьте этот код:
if AContext.Connection.Socket.Binding.PeerIP = '127.0.0.1' then
AContext.Connection.Disconnect;
Замените 127.0.0.1 на ваш фильтр, это всего лишь «чрезвычайно базовый пример», то же самое относится и к другим серверам Indy, которые имеют событие «OnConnect».