如何解決http封包中gzip編碼的html

gzip編碼,最早由Jean-loup Gailly和Mark Adler創建,用於UNIX系統的文件壓縮。我們在Linux中經常會用到後綴爲.gz的文件,它們就是GZIP格式的。現今已經成爲Internet 上使用非常普遍的一種數據壓縮格式,或者說一種文件格式。HTTP協議上的GZIP編碼是一種用來改進WEB應用程序性能的技術。大流量的WEB站點常常使用GZIP壓縮技術來讓用戶感受更快的速度。(摘在百度百科)。

      廢話少說,來進入正題吧。

      大家都知道,在默認模式下,http協議中發送的網頁的Html代碼是經過gzip編碼後傳送的。那麼我們怎麼才能回覆這段編碼後的html呢?

      大家可能都知道linux下有一個gzip命令。可以把文件壓縮成gzip編碼的格式,即*.gz

      而對於文件的壓縮和解壓縮,可以採用zlib庫中提供的各種接口來進行操作。但是這裏問題來了。關於gzip編碼的那些函數都帶有gz開頭的標示。而這些接口維護了一個名叫gz_stream的結構體。並且是針對文件FILE*操作的。

      而我們要解決的問題是,我們把截取的封包中的gzip編碼的內容拿出來,放到一個buffer中。那麼怎麼才能針對這個buffer中的數據應用這些接口呢?

      我本來的想法是能不能在這些接口中找到專門對內存中的數據進行解碼?

      考慮這個問題,我看了這個庫的源代碼。後來放棄了。至於放棄的原因,可能是我意志力不夠,或者不想看那些源代碼了。總之,我看了一天,看的我頭疼。

      後來我就想個辦法繞開這一思路,走個彎路。問題豁然開朗。

      思路如下:

      1. 把獲取到的經過編碼的數據保存到一個文件中。注意寫文件的時候一定要以二進制方式。否則是不能解碼的。

      2. 應用zlib中的接口,gzopen(),gzread(),gzclose()即可完成解碼的任務了。


      我把這一過程簡單封裝起來,在VC2005下經過測試,僅提供參考:

 

    

發佈了24 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章