![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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)