大家都知道,在默認模式下,http協議中發送的網頁的Html代碼是經過gzip編碼後傳送的。那麽我們怎麽才能回復這段編碼後的html呢?
大家可能都知道linux下有壹個gzip命令。可以把文件壓縮成gzip編碼的格式,即*.gz
而對於文件的壓縮和解壓縮,可以采用zlib庫中提供的各種接口來進行操作。但是這裏問題來了。關於gzip編碼的那些函數都帶有gz開頭的標示。而這些接口維護了壹個名叫gz_stream的結構體。並且是針對文件FILE*操作的。
而我們要解決的問題是,我們把截取的封包中的gzip編碼的內容拿出來,放到壹個buffer中。那麽怎麽才能針對這個buffer中的數據應用這些接口呢?
我本來的想法是能不能在這些接口中找到專門對內存中的數據進行解碼?
考慮這個問題,我看了這個庫的源代碼。後來放棄了。至於放棄的原因,可能是我意誌力不夠,或者不想看那些源代碼了。總之,我看了壹天,看的我頭疼。
後來我就想個辦法繞開這壹思路,走個彎路。問題豁然開朗。
思路如下:
1. 把獲取到的經過編碼的數據保存到壹個文件中。註意寫文件的時候壹定要以二進制方式。否則是不能解碼的。
2. 應用zlib中的接口,gzopen(),gzread(),gzclose()即可完成解碼的任務了。