Показать сообщение отдельно
  #2  
Старый 21.05.2010, 17:58
amelnyk amelnyk вне форума
Прохожий
 
Регистрация: 20.05.2010
Сообщения: 2
Репутация: 10
По умолчанию

Родил решение). Может кому еще будет полезно...
Создаю класс наследник THTTPReqResp, в котором переопределен метод Receive:

Код:
 TMyHTTPReqResp = class(THTTPReqResp)
    public
      procedure Receive(Context: Integer; Resp: TStream; IsGet: Boolean);override;
  end;

Сам метод выглядит примерно так:

////////////////////////////////////////////////////////////////////////////////

Код:
procedure TMyHTTPReqResp.Receive(Context: Integer; Resp: TStream; IsGet: Boolean);
var
  outStream    : TMemoryStream;
  contEncoding : string;
  size         : DWord;
  index        : DWord;
begin
  inherited;

  try
    size := 20;
    index := 0;
    SetLength(contEncoding, size);
    //проверяем есть ли заголовок Content-Encoding
    if not HttpQueryInfo(Pointer(Context), HTTP_QUERY_CONTENT_ENCODING, @contEncoding[1], size, index) then
      Exit;

    //если есть, то смотрим стоит ли там gzip
    if Pos('gzip', contEncoding) = 0 then
      Exit;

    //если gzip, то разархивировываем и копируем в возвращаемый стрим
    Resp.Position := 0;
    outStream := TMemoryStream.Create;
    try
      GZDecompressStream(Resp, outStream);

      Resp.Position := 0;
      Resp.CopyFrom(outStream, 0)
    finally
      outStream.Free;
    end;
  except

  end;
end;
Admin: Учимся пользоваться тегами!

Где метод GZDecompressStream взят из либы Zlib, скачанной для Delphi 2009 отсюда: http://www.base2ti.com/zlib.htm
А то с родным ZLib че-то не сложилось, не хотел он распаковывать.
Ответить с цитированием