Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Прокси   Найти похожие ветки 

 
Egorr   (2005-05-05 15:28) [0]

Добрый день, господа!
Пишу свой прокси, пока без кеширования.
http протокол уже работает через прокси, а https не хочет.
Подскажите, что я не учел для https.

Вот фрагмент кода:

procedure THTTPProxy.DoConnect(AThread: TIdPeerThread);
var
Request: TStringList;
Command, Protocol, Url, Host, Port, Path, Dir, FileName: String;
idx1, idx2, idx: integer;
begin

Request := TStringList.Create;
try
  repeat
    Command := AThread.Connection.ReadLn("");
    Request.Add(Command);
  until Command = "";

  Command := Request[0];
  idx1 := ChrPos(PChar(Command), " ");
  idx2 := ChrPosR(PChar(Command), " ");
  if idx1 = idx2 then begin // 0 or 1 space
    AThread.Connection.WriteLn("HTTP/1.1 400 Bad Request");
    abort;
  end;

  Protocol := Copy(Command, idx2 + 1, Length(Command) - idx2);
  Url := Copy(Command, idx1 + 1, idx2 - idx1 - 1);
  Command := Copy(Command, 1, idx1 - 1);
  Port := "";

  if AnsiStartsText("http:", Url) then begin
    Delete(Url, 1, Length("http:"));
    Port := "80";
  end;
  if AnsiStartsText("https:", Url) then begin
    Delete(Url, 1, Length("https:"));
    Port := "443";
  end;
  if AnsiStartsText("//", Url) then begin
    Delete(Url, 1, Length("//"));
  end;
  idx := ChrPos(Url, "/");
  if idx > 0 then begin
    Host := Copy(Url, 1, idx - 1);
    Path := Copy(Url, idx, Length(Url) - idx + 1);
  end else begin
    Host := Url;
    Path := "/";
  end;
  idx := ChrPos(Host, ":");
  if idx > 0 then begin
    Port := Copy(Url, idx + 1, Length(Url) - idx);
    Host := Copy(Host, 1, idx - 1);
  end;
  if Length(Path) = 0 then Path := "/";

  idx := ChrPosR(Path, "/");
  Assert(idx > 0);

    Request[0] := Command + " " + Path + " " + Protocol;

  MappedHost := Host;
  MappedPort := StrToIntDef(Port, 80);

  inherited;

  if not AnsiSameText(Command, "CONNECT") then begin
    TIdMappedPortTCPData(AThread.Data).OutboundClient.Write(Request.Text);
  end;
  if AThread.Connection.CurrentReadBufferSize > 0 then begin
    TIdMappedPortTCPData(AThread.Data).OutboundClient.Write(
      AThread.Connection.ExtractXBytesFromBuffer(AThread.Connection.CurrentReadBufferSize));
  end;
finally
  Request.Free;
end;
end;

Заранее благодарен!


 
Eraser ©   (2005-05-05 17:14) [1]

Egorr

Ты хоть примерно ошибку опиши и отметь подозрительный участок в коде.


 
Egorr   (2005-05-05 21:31) [2]

Так в том то и дело, никакой ошибки нет. Мой прокси http-запросы "обрабатывает" и доставляет ответ пользователю в браузер, а https - нет!
Тоесть ответ на https-запрос пользователю не доставляется почему-то.


 
Egorr   (2005-05-06 22:10) [3]

Удалено модератором


 
atruhin ©   (2005-05-09 10:16) [4]

1. После посылки комманды connect броузер ждет подтверждения от прокси о том что он принял команду.
2. Такой разбор заголовков может работать только для самых примитивных запросов. Для нормально работы необходимо разбирать, анализировать и модифицировать множество полей заголовка (Proxy-Connection, Connection, Keep-Alive, и т.д.)


 
DJ_Kit   (2005-06-22 14:14) [5]

Слухай, а можешь полный код отсендить на мылко?
Возможно доработаю м фсе будет путем.. :)



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
11-1108630956
thaddy
2005-02-17 12:02
2005.10.16
ClsStyle or CS_NOCLOSE doesn t work properly


11-1108223021
mordush
2005-02-12 18:43
2005.10.16
KOL,KOL и ещё раз KOL


1-1127307206
DelphiLexx
2005-09-21 16:53
2005.10.16
Избежать мерцания при перемещении


6-1118762188
Dima__
2005-06-14 19:16
2005.10.16
работа с сокетами без создания формы


14-1127302393
palva
2005-09-21 15:33
2005.10.16
Что деется!