如何解码gzip编码的html?

waz*_*123 2 delphi gzip http indy

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

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

3d5
????????????????????????????????????
????????????????????????????????????
????????????????????????????????????
';
Run Code Online (Sandbox Code Playgroud)

数据大小为:3d5(十六进制)全部存储到TIdBytes变量"data".

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

Rem*_*eau 6

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

TIdHTTP内部处理分块数据.如果TIdHTTP解压缩的数据已被gzip'ped,如果您事先为属性分配了一个TIdZLibCompressorBase派生的组件,可以为您解压缩.TIdCompressorZLibTIdHTTP.Compressor

  • 如果HTTP数据存储在内存中,例如`String`或`TIdBytes`,则可以使用`TIdHTTP`对其进行解码.将`TIdIOHandlerStream`组件分配给`TIdHTTP.IOHandler`属性,给IOHandler一个从内存中读取的`TStream`(你可以使用Indy的`TIdMemoryBufferStream`类)和一个nil`TStream`来写.然后使用伪造的URL调用任何`TIdHTTP`的请求方法,例如`Get()`.生成的HTTP请求将被`TIdIOHandlerStream`丢弃,而TIdHTTP将按原样解析`TStream`数据.然后,您可以使用解码数据执行任何操作. (2认同)