Прокси-сервер с использованием Indy - PullRequest
14 голосов
/ 09 ноября 2010

Я новичок в Indy и хочу создать с ним простой прокси-сервер.Это довольно большая библиотека, и я просто не знаю, с чего начать.Когда клиент подключается к серверу, OnExucute запускается и получает подключение клиента в качестве параметра (AContext.Connection).

Я хочу сделать следующее:

[client connection] := AContext.Connection
read host/port from [client connection]
[remote connection] := connect to host/port
while both connections alive:
  if data available in [client connection]:
    read data from [client connection]
    write data to [remote connection]
  if data available in [remote connection]:
    read data from [remote connection]
    write data to [client connection]

Вопрос в том, какие функции следует использоватьдля этого?В объекте Connection есть свойство IOHandler с тоннами из них.Пожалуйста, помогите.

Я использую Indy, который поставляется с Delphi2010.

1 Ответ

20 голосов
/ 09 ноября 2010

Indy имеет собственные прокси-компоненты, которые делают то, что вы просите.Посмотрите на компоненты TIdMappedPortTCP и TIdHTTPProxyServer в качестве отправных точек.

TIdMappedPortTCP - это прокси общего назначения, который просто передает необработанные данные взад и вперед.Вы можете использовать его событие OnConnect для динамической настройки целевого хоста / порта для этого соединения (например, путем чтения его с клиента), или вы можете установить его свойства MappedHost и MappedPort статически для всех соединений.Вы можете использовать события OnExecute и OnOutboundData для изменения данных при их прохождении через прокси-сервер, если это необходимо.

TIdHTTPProxyServer - это специализированный прокси-сервер только для прокси на основе HTTP, где клиент используетГлаголы HTTP GET, POST, HEAD и CONNECT, задающие абсолютные URL-адреса для целевого хоста / порта, а затем, при необходимости, передающие заголовки HTTP и данные туда и обратно (CONNECT обычно используется для проксисоединение SSL / TLS через брандмауэр).

...