Главная страница
    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.042 c
11-1093953154
New
2004-08-31 15:52
2005.10.16
Компиляция на FPC


2-1126268045
TStas
2005-09-09 16:14
2005.10.16
Освобождение памяти.


14-1127143583
Ученик чародея
2005-09-19 19:26
2005.10.16
Что сейчас представляла бы собой Россия,


3-1125475563
DmitryNekl
2005-08-31 12:06
2005.10.16
Неверная фильтрация, ADO, доступ к текстовым файлам через Jet


3-1125477648
Max Zyuzin
2005-08-31 12:40
2005.10.16
Помогите составить SQL запрос





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский