我从网站服务器获取了数据:
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"中。
如何解码gzip数据,对其进行更改,并重新编码并编辑长度3d5为新长度。
String
或TIdBytes
,您可以使用TIdHTTP
对其进行解码。将TIdIOHandlerStream
组件分配到TIdHTTP.IOHandler
属性,并为IOHandler提供一个从内存读取的TStream
(您可以使用Indy的TIdMemoryBufferStream
类),以及一个空TStream
用于写入。然后,使用伪造的URL调用TIdHTTP
的任何请求方法,例如Get()
。由TIdIOHandlerStream
丢弃所生成的HTTP请求,并且TIdHTTP
将按原样解析TStream
数据。然后,您可以根据需要处理已解码的数据。 - Remy LebeauTIdIOHandlerStream
有一个构造函数,带有AReceiveStream
和ASendStream
参数,以及一个OnGetStreams
事件,带有VReceiveStream
和VSendStream
参数。其中任何一个都可以用来将您的数据作为ReceiveStream
提供给IOHandler,并将nil
作为SendStream
。对于ReceiveStream
,请使用TIdMemoryBufferStream
、TMemoryStream
、TBytesStream
或其他任何您想要用来保存HTTP数据的TStream
类型。 - Remy LebeauTStringString.Write()
。相反,将你的data
传递给TStringStream
构造函数即可。 - Remy Lebeau