我从Web服务器获取数据:
data := '
HTTP/1.1 200 OK
Content-Encoding: gzip
Vary: Accept-Encoding
Content-type: text/html
Transfer-Encoding: chunked
Server: Apache
3d5
????????????????????????????????????
????????????????????????????????????
????????????????????????????????????
';
数据大小为:3d5(十六进制)
全部存储到tidbytes变量“data”。
如何解码gziped数据,更改其中的内容,然后重新编码并将长度3d5编辑为new。
最佳答案
Transfer-Encoding
响应头设置为chunked
。这意味着服务器以块的形式发送正文数据,其中每个块表示其自身的大小,其中0长度的块表示数据的结尾。3d5
表示第一个块的大小。只有当响应中只有一个数据块时,这才是HTML的完整大小。TIdHTTP
内部为您处理分块数据。如果解块的数据已被gzip压缩,TIdHTTP
可以为您解压,如果您事先将TIdZLibCompressorBase
派生组件(如TIdCompressorZLib
)分配给TIdHTTP.Compressor
属性。