![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прокси [D6, WinXP]
Egorr © (2005-05-05 15:28:00)Добрый день, господа!
Пишу свой прокси, пока без кеширования.
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;
Заранее благодарен!
DJ_Kit (2005-06-22 14:14:00) [1]Слухай, а можешь полный код отсендить на мылко?
Возможно доработаю м фсе будет путем.. :)
atruhin (2005-05-09 10:16:00) [2]1. После посылки комманды connect броузер ждет подтверждения от прокси о том что он принял команду.
2. Такой разбор заголовков может работать только для самых примитивных запросов. Для нормально работы необходимо разбирать, анализировать и модифицировать множество полей заголовка (Proxy-Connection, Connection, Keep-Alive, и т.д.)
Egorr (2005-05-06 22:10:00) [3]Удалено модератором
Egorr (2005-05-05 21:31:00) [4]Так в том то и дело, никакой ошибки нет. Мой прокси http-запросы "обрабатывает" и доставляет ответ пользователю в браузер, а https - нет!
Тоесть ответ на https-запрос пользователю не доставляется почему-то.
Eraser (2005-05-05 17:14:00) [5]Egorr
Ты хоть примерно ошибку опиши и отметь подозрительный участок в коде.