頁面Gzip壓縮與解壓縮工具類GZIPUtils
阿新 • • 發佈:2018-11-05
問題:
F12能看到Response Headers的資訊,一般情況下,Content-Encoding為gzip時就表明該檔案是一個壓縮過的。
需求:
需要過濾該頁面,並且對內容進行修改,但是是一個壓縮格式的修改不了!
解決方案:
對response的gzip格式進行解壓。
直接上GZIPUtils的程式碼,網上找的,呵呵
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; public class GZIPUtils { public static final String GZIP_ENCODE_UTF_8 = "UTF-8"; public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1"; public static byte[] compress(String str, String encoding) { if (str == null || str.length() == 0) { return null; } ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gzip; try { gzip = new GZIPOutputStream(out); gzip.write(str.getBytes(encoding)); gzip.close(); } catch ( Exception e) { e.printStackTrace(); } return out.toByteArray(); } public static byte[] compress(String str) throws IOException { return compress(str, GZIP_ENCODE_UTF_8); } public static byte[] uncompress(byte[] bytes) { if (bytes == null || bytes.length == 0) { return null; } ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayInputStream in = new ByteArrayInputStream(bytes); try { GZIPInputStream ungzip = new GZIPInputStream(in); byte[] buffer = new byte[256]; int n; while ((n = ungzip.read(buffer)) >= 0) { out.write(buffer, 0, n); } } catch (Exception e) { e.printStackTrace(); } return out.toByteArray(); } public static String uncompressToString(byte[] bytes, String encoding) { if (bytes == null || bytes.length == 0) { return null; } ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayInputStream in = new ByteArrayInputStream(bytes); try { GZIPInputStream ungzip = new GZIPInputStream(in); byte[] buffer = new byte[256]; int n; while ((n = ungzip.read(buffer)) >= 0) { out.write(buffer, 0, n); } return out.toString(encoding); } catch (Exception e) { e.printStackTrace(); } return null; } public static String uncompressToString(byte[] bytes) { return uncompressToString(bytes, GZIP_ENCODE_UTF_8); } // public static void main(String[] args) throws IOException { // String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; // System.out.println("字串長度:"+s.length()); // System.out.println("壓縮後::"+compress(s).length); // System.out.println("解壓後:"+uncompress(compress(s)).length); // System.out.println("解壓字串後::"+uncompressToString(compress(s)).length()); // } }
使用方式:
System.out.println("Encoding is:"+response.getHeader("Content-Encoding")); //判斷返回的內容的Content-Encoding是否是gzip if(response.getHeader("Content-Encoding")=="gzip") { //System.out.println("解壓中。。。。。。"); byte[] uncompress = GZIPUtils.uncompress(buffer); System.out.println("解壓後內容:"+new String(uncompress)); // // 內容修改操作 // }
後續自行研究了