我从网络服务器获取数据:
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编辑为新的。
答案 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;