Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Связать IdHTTP и IdHTTPServer


Автор: serg16 23.8.2008, 18:37
Хочу написать прогу, типа прокси. Нужно принимать запросы из браузера, отправлять на сервер и предавать результаты обратно в браузер. Выходить в инет нужно с определенного IP.
В IdHTTPProxyServer не нашел boundIP. Поэтому решил попробовать использовать IdHTTP и IdHTTPServer.
Написал вот такое:
Код

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  IdHTTP1.Request.RawHeaders.Text:=ARequestInfo.RawHeaders.Text;
  if ARequestInfo.Command='GET' then
    begin
      try
        AResponseInfo.ContentText:=IdHTTP1.Get('http://'+ARequestInfo.Host+ARequestInfo.Document);
      except
      end;
      AResponseInfo.RawHeaders.Text:=IdHTTP1.Response.RawHeaders.Text;
      AResponseInfo.ResponseText:=IdHTTP1.ResponseText;
    end;
  if ARequestInfo.Command='POST' then
    begin
    end;
end;

Первый запрос успешно проходит и страничка попадает в браузер. Но дальше идет попытка загрузки стилей, картинок и прога вылетает с ошибкой "Socket Error # 10038 Socket operation on non-socket".
Никогда подобных прог не писал и видимо делаю что-то не так. Подскажите, в чем мои ошибки?

Автор: SneG0K 25.8.2008, 12:52
Лучше пиши на сокетах или TCPServer/Client

Автор: Snowy 25.8.2008, 13:42
Проблема в том, что ты используешь один TIdHTTP в мультитредовом приложении.
Браузер грузит страницу - нормально грузится.
Потом он ищет там стили, картинки и т.д. и запрашивает их у сервера ОДНОВРЕМЕННО.
Не все одновременно, но по 4-10 параллельных запросов посылает.
А теперь, как ты думаешь, что будет, когда ты будешь мучать TIdHTTP, давая ему одновременно 4 или более разных запросов?
Ясен пень, что ни одного не выполнит и вылетит с критом.
Создавай TIdHTTP локально. Не используй глобальные переменные и объекты.

Автор: serg16 25.8.2008, 18:51
Ага! Теперь понятно, почему при втором Get перескакивает на начало. Спасибо!
Поставил последнюю версию indy, изучаю исходник прокси (что-то сразу не сообразил где взять пример smile )

Автор: p486 1.7.2009, 09:44
вылжи пожалуйста то, что у тебя получилось. тоже бюсь над этой проблемой пока безрезультатно  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)