Форум: "Сети";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
ВнизПрокси Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c