Главная страница
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.048 c
1-1127358717
Antonn
2005-09-22 07:11
2005.10.16
Регистрация программы в автозапуске


9-1116326699
VVV-First
2005-05-17 14:44
2005.10.16
GlScene, Objects


3-1125819104
suharew
2005-09-04 11:31
2005.10.16
Как добавить время


4-1124115667
NikNet
2005-08-15 18:21
2005.10.16
ListBox с иконками слева?


5-1103272219
han
2004-12-17 11:30
2005.10.16
Копонент наподобии CombBox