Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Content-Encoding: gzip


Автор: astako 5.4.2008, 12:06
Код

program DownloadLink;

uses
  windows, wininet, zlib;

{$R *.res}


var
  hI, hConnect, hFile: HInternet;
  HEADERS: String;
  L, ReadedSize: Cardinal;
  InBuf: PChar;
  OutBuf: Pointer;
  i,InBytes,OutBytes: integer;
begin

  Headers:='Accept: */*'#13#10+
           'Accept-Language: ru'#13#10+
           'Accept-Encoding: gzip, deflate'#13#10+
           'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'#13#10+
           'Host: www.google.com.ua'#13#10+
           'Connection: Keep-Alive'#13#10;

  hI:=InternetOpen('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', INTERNET_OPEN_TYPE_PRECONFIG , nil, nil, 0);
  hConnect:=InternetConnect(hI, 'www.google.com.ua', 80, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
  hFile:=HTTPOpenRequest(hConnect, 'GET', '/', HTTP_VERSION, nil, nil, INTERNET_FLAG_NO_COOKIES or INTERNET_FLAG_NO_AUTO_REDIRECT, 0);
  HTTPSendRequest(hFile, @HEADERS[1], Length(HEADERS), nil, 0);

  GetMem(InBuf,65535);

  i:=0;
  while True do
  begin
    InternetQueryDataAvailable(hFile, L, 0, 0);
    if L=0 then break;
    if NOT InternetReadFile(hFile, @InBuf[i], L, ReadedSize) then break;
    inc(i, ReadedSize);
  end;
  InBytes:=i;

  InternetCloseHandle(hFile);
  InternetCloseHandle(hConnect);
  InternetCloseHandle(hI);

  OutBuf:=nil;
  DeCompressBuf(InBuf,InBytes,0,OutBuf,OutBytes);

  FreeMem(InBuf);
end.


При DeCompressBuff вылетает с ошибкой "Exception EDecompressionError in module DownloadLink.exe at 00018A4C. error."
При этом "Content-Encoding: gzip". Использую Delphi 6.
Убрать 'Accept-Encoding: gzip, deflate' в запросе - не выход, нужно именно разжать данные.
Как правильно разжать буфер (TSream использовать не желательно) используя zlib?
Так же буду рад примеру разжатия используя urlmon (IDataFilter).
Заранее спасибо.

Автор: MetalFan 5.4.2008, 18:16
возможно InBytes>65535

Автор: astako 6.4.2008, 18:53
Цитата(MetalFan @ 5.4.2008,  18:16)
возможно InBytes>65535

нет, там намного меньше.

Автор: MetalFan 6.4.2008, 20:16
Цитата(astako @  5.4.2008,  12:06 Найти цитируемый пост)
с ошибкой "Exception EDecompressionError

а, ну так значит не может оно распаковать эти данные...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)