java兌現html網頁的gzip解壓


 

java實現html網頁的gzip解壓

 

在對網頁抓包中發現,返回的很多網頁是經過壓縮的,比如訪問谷歌首頁,返回的頭文件中包含Content-Encoding gzip

使用gzip可以省下很多網頁流量,在網速一定的情況下,可以提高訪問效率,我們用java訪問時如何可以得到gzip的返回,並且我們如何解析返回的gzip呢?

我們以訪問http://www.baidu.com/為例
我們用URL的openStream方法直接訪問時並不返回gzip壓縮數據,這是因為時候返回gzip需要判斷瀏覽器是否支持gzip壓縮,所以我們請求數據的時候在http請求頭中添加支持gzip的請求頭就可以
添加conn.setRequestProperty(“Accept-Encoding”, “gzip,deflate”);就告訴服務器你的瀏覽器支持gzip解壓了

 

URL url = new URL("http://www.baidu.com/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Accept-Encoding", "gzip,deflate");
conn.connect();

InputStream in = conn.getInputStream();

BufferedReader bin = new BufferedReader(new InputStreamReader(in, "GB2312"));
String s = null;
while((s=bin.readLine())!=null){
	System.out.println(s);
}
bin.close();
 

沒有conn.setRequestProperty(“Accept-Encoding”, “gzip,deflate”);不會出現亂碼

加上conn.setRequestProperty(“Accept-Encoding”, “gzip,deflate”);就是亂碼,這事因為服務器對返回內容進行了gzip壓縮的緣故,我們只要判斷返回頭是否包含Content-Encoding gzip,就可以判斷是不是壓縮過的數據,對待壓縮后的數據我們只需進行gzip解壓就好了

 

只需將上面的代碼加上
GZIPInputStream gzin = new GZIPInputStream(in);
並將
BufferedReader bin = new BufferedReader(new InputStreamReader(in, "GB2312"));
改為
BufferedReader bin = new BufferedReader(new InputStreamReader(gzin, "GB2312"));
 

當然是否需要gzip解壓,只判斷返回數據頭是否包含Content-Encoding gzip就可以了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM