![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разобрать Chunked encoded [D7, WinXP]
Danger © (2008-01-09 19:25:00)Скачиваю по HTTP web-страницу с http-сервера в chunked transfer-encoding, кладу все скачанное в TStream. Есть у кого-нибудь готовый алгоритм разбора chunked encoded, чтоб получить на выходе обычную страницу в html-представлении ?
Заранее спасибо.
cerber (2008-12-16 23:03:00) [1]2> Eraser © (07.10.08 00:43) [3]
здается мне OutStream вообще не нужен)
Eraser (2008-10-07 00:43:00) [2]
procedure TForm1.Button2Click(Sender: TObject);
var
InStream, OutStream: TmemoryStream;
begin
IdHTTP1.IOHandler:=IdIOHandlerStack1;
IdHTTP1.CookieManager:=IdCookieManager1;
IdHTTP1.Compressor:=IdCompressorZLib1;
IdHTTP1.AllowCookies:=true;
IdHTTP1.HandleRedirects:=true;
IdHTTP1.Request.Accept:='image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*';
IdHTTP1.Request.AcceptLanguage:='ru';
IdHTTP1.Request.AcceptEncoding:='gzip, deflate';
IdHTTP1.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1)';
IdHTTP1.Request.Host:='mail.yandex.ru';
IdHTTP1.Request.Connection:='Keep-Alive';
InStream:=TMemoryStream.Create;
OutStream:=TMemoryStream.Create;
IdHTTP1.Get(' http://mail.yandex.ru/pda/',InStream);
InStream.Position := 0;
//IdCompressorZLibEx1.DecompressGZipStream(InStream,OutStream);
Memo1.Lines.LoadFromStream(InStream);
InStream.Free;
OutStream.Free;
end;
все прекрасно работает.
D2009, Indy 10.
serega123 (2008-10-03 05:51:00) [3]Та же проблемма!!!
перерыл весь интернет, решения не нашел.
Мои заголовки (это я смотрю в браузере, с помощью ieHTTPHeaders):
GET /pda/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: ru
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1)
Host: mail.yandex.ru
Connection: Keep-Alive
Заголовки ответа сервера (тоже посмотрел в браузере):
HTTP/1.1 200 OK
Cache-Control: max-age=0, must-revalidate, proxy-revalidate, no-cache, no-store, private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=windows-1251
Date: Thu, 02 Oct 2008 23:08:19 GMT
Expires: Thu, 02 Oct 2008 23:13:19 GMT
Last-Modified: Thu, 02 Oct 2008 23:08:19 GMT
Pragma: no-cache
Server: BAIDA/2.0.1
Transfer-Encoding: Chunked
Мой код:
procedure TForm1.Button1Click(Sender: TObject);
var
InStream, OutStream: TmemoryStream;
begin
IdHTTP1.IOHandler:=IdIOHandlerStack1;
IdHTTP1.CookieManager:=IdCookieManager1;
IdHTTP1.Compressor:=IdCompressorZLibEx1;
IdHTTP1.AllowCookies:=true;
IdHTTP1.HandleRedirects:=true;
IdHTTP1.Request.Accept:='image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*';
IdHTTP1.Request.AcceptLanguage:='ru';
IdHTTP1.Request.AcceptEncoding:='gzip, deflate';
IdHTTP1.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1)';
IdHTTP1.Request.Host:='mail.yandex.ru';
IdHTTP1.Request.Connection:='Keep-Alive';
InStream:=TMemoryStream.Create;
OutStream:=TMemoryStream.Create;
IdHTTP1.Get(' http://mail.yandex.ru/pda/',InStream);
IdCompressorZLibEx1.DecompressGZipStream(InStream,OutStream);
Memo1.Lines.LoadFromStream(OutStream);
InStream.Free;
OutStream.Free;
end;
Delphi 2006, Indy 10
код наглухо виснет на строчке IdHTTP1.Get...
Помогите, люди добрые!!!
MetalFan (2008-01-09 21:03:00) [4]может подсмотреть в Indy?