Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TidTCPServer и HTTP-запросы [D7, Win2k, WinXP]


Орион ©   (2006-08-24 15:28:00) 

Нужно написать что-то вроде proxy-сервера, но запросы нужно получать полностью и в сыром виде (для дальнейшей обработки).

Так вот, как правильно принять get/post запрос от браузера?
Т.е. узнать когда запрос полностью передался.
Ведь TidHTTPServer как-то это делает.


Орион   (2006-08-28 10:35:00) [1]

> [9] Slym ©   (28.08.06 05:35)

Это не заголовок ;) это параметры GET/POST запроса.
В общем я разобрался с HTTPServer, но необходимость в нем уже отпала))

Но если кому интересно:

procedure TForm1.HTTPServerCommandGet(AThread: TIdPeerThread;
 ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
Data: TStringList;
begin
Data:=TStringList.Create;
for i:=0 to ARequestInfo.RawHeaders.Count-1 do
Data.Add(ARequestInfo.RawHeaders.Names[i]+ARequestInfo.RawHeaders.NameValueSeparator+ARequestInfo.RawHeaders.Values[ARequestInfo.RawHeaders.Names[i]]);
Data.Add('');
//         Data                                ,              ,          
FreeAndNIl(Data);
end;


Slym   (2006-08-28 05:35:00) [2]

ParseParams:=false;
или
RequestInfo.UnparsedParams


Slym   (2006-08-28 05:31:00) [3]

Орион ©   (25.08.06 13:13) [6]
TIdHTTPServer не подходит, т.к. в нем нельзя получить нераспарсенный запрос

Можно...


Орион   (2006-08-25 17:10:00) [4]

up)


Орион   (2006-08-25 13:13:00) [5]


> заголовок оканчиватся двумя End Of Line

Так и есть. Но кроме заголовка еще могут быть post-данные. И здесь куча мелочей: "Content-length", "Transfer-Encoding: chunked".

Сейчас я задам вопрос от которого вам станет смешно))
Чувствую себя нубом.

Есть ли класс, который полностью считывает запрос от браузера с учетом всех тонкостей реализации HTTP 1.1?

ЗЫ: TIdHTTPServer не подходит, т.к. в нем нельзя получить нераспарсенный запрос.


$hade   (2006-08-25 07:49:00) [6]

AThread.Connection.ReadLn(EOL+EOL);
заголовок оканчиватся двумя End Of Line


Reindeer Moss Eater   (2006-08-24 17:43:00) [7]

Readln в цикле пока не придет пустая строка.
После чего анализ полученного на наличие поля ContentLength
Если поле есть, прочитать его значение и дополнительно считать от браузера буфер такой длины.

Вот и весь заголовок.


Сергей М.   (2006-08-24 15:48:00) [8]


> обратно


"Обратно" - это еще куда ?)


Орион   (2006-08-24 15:38:00) [9]


> Мало того, он дает возможность обработки полного текста
> принятого запроса.


Конечно) Но обратно получить "сырой" запрос нельзя. Или все же можно?
Тогда подскажи, пожалуйста, как?


Сергей М.   (2006-08-24 15:35:00) [10]


> Ведь TidHTTPServer как-то это делает


Мало того, он дает возможность обработки полного текста принятого запроса.
На то он и TidHTTPServer)


Наверх

Титульная страница Поиск, карта сайта Написать письмо