#delphi #indy10
#delphi #indy10
Вопрос:
Я использую сервер TIdHTTPProxyServer для реализации простого HTTP-прокси, но теперь я хотел бы заблокировать некоторые соединения, если они соответствуют определенным URL-адресам. Какое событие и / или компонент лучше всего подходит для этого? Документация Indy не слишком понятна. : (
Спасибо!
Комментарии:
1. Сервер TIdHTTPProxyServer просто не может этого сделать, приходится редактировать его код
2. @Worm с уважением, да, это возможно, смотрите мой ответ…
3. @Worm и @Dorin: Это, конечно, возможно, смотрите мой ответ. 😉
4. @jachguate возможно ли также изменить ответ?
Ответ №1:
В качестве базового фильтра вы можете использовать обработчик событий OnHTTPBeforeCommand (который запускается перед отправкой команды на HTTP-сервер).
Проверьте свойства параметра контекста, вы найдете полезные:
Context.Command
Context.OutboundClient.Host
Context.OutboundClient.Port
Context.Document
Context.Headers
Я никогда не пытался остановить прохождение в это время, но держу пари, вы можете сделать это, просто создав исключение в этот момент, если вы определите, что есть соответствие правилу блока.
Комментарии:
1. Ваш ответ заставил меня понять, что я использовал старую версию Indy. Это значительно улучшилось, по крайней мере, те части, которые я проверил.
Ответ №2:
у компонента есть событие «OnConnect», дважды щелкните по нему и добавьте этот код:
if AContext.Connection.Socket.Binding.PeerIP = '127.0.0.1' then
AContext.Connection.Disconnect;
замените 127.0.0.1 своим фильтром, это всего лишь «чрезвычайно простой пример», то же самое относится к другим серверам Indy, у которых есть событие «OnConnect».
Комментарии:
1. -1: OnConnect срабатывает, когда HTTP- клиент подключается к вашему прокси, а не когда прокси подключается к удаленному серверу (это зависит от вас, TidHTTPProxy это не реализует), и URL-адрес по-прежнему недоступен. Если вы только не проверяете, каким «внутренним» IP-адресам разрешено отправлять HTTP-запросы извне, это неправильный способ.
2. @ldsandon:
TIdHTTPProxyServer
реализует ли для вас подключения к удаленному серверу (в противном случае это был бы не такой уж и прокси). СмотритеTIdHTTPProxyServerContext.OutboundClient
свойство.3. @Remy Lebeau: вы правы, я запутался с реализацией прокси, которую я сделал некоторое время назад, используя только TIdHTTPServer.