如何解码gzip编码的html?

时间:2011-12-21 22:04:33

标签: http delphi gzip indy

我从网络服务器获取数据:

data := '
HTTP/1.1 200 OK
Content-Encoding: gzip
Vary: Accept-Encoding
Content-type: text/html
Transfer-Encoding: chunked
Server: Apache

3d5
????????????????????????????????????
????????????????????????????????????
????????????????????????????????????
';

数据大小为:3d5(十六进制) all存储到TIdBytes变量“data”。

如何解码gziped数据,更改其中的内容,然后编码并将长度3d5编辑为新的。

2 个答案:

答案 0 :(得分:6)

Transfer-Encoding响应标头设置为chunked。这意味着服务器以块的形式发送正文数据,其中每个块指示其自己的大小,其中0长度的块指示数据的结束。 3d5指的是第一个块的大小。只有在响应中只有1个数据块时,这才是HTML的完整大小。

TIdHTTP在内部为您处理分块数据。如果已经解压缩的数据,TIdHTTP可以为您解压缩,如果您将TIdZLibCompressorBase派生的组件(例如TIdCompressorZLib)分配给TIdHTTP.Compressor物业事先。

答案 1 :(得分:1)

您可以使用ZlibExGz单位的GZDecompressStr()功能解压缩http gzipped正文。只需将您从http响应消息中获取的数据作为参数传递给它,它将返回解压缩的数据。

uses ZlibExGz;

var s:string;

begin
 // read the gzipped data in "s"
 s:=GZDecompressStr(s);
 // now "s" contains uncompressed data
end;