Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.044 c
3-1125564534
Sanich
2005-09-01 12:48
2005.10.16
Строки разного цвета в TDBGridEh. Поиск по TDBGridEh.


1-1127225050
Германн
2005-09-20 18:04
2005.10.16
Ошибка Invalid File Name


10-1105790489
aus
2005-01-15 15:01
2005.10.16
Symantec Antivirus Server


5-1103203936
Нулевой
2004-12-16 16:32
2005.10.16
Где можно почитать установка компонент?


14-1127397669
cyborg
2005-09-22 18:01
2005.10.16
Как сейчас обстоят дела к принтерами?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский