2018年1月25日 星期四

how to decode web content in gzip or deflate format using Java API?

有些網站回傳網頁會進行內容壓縮,壓縮方法常見有gzip或deflate,
可由回傳內容的ContentEncoding標頭決定如何處理回傳的壓縮內容。

以Java為例,解壓縮寫法如下:

  1.  
  2. // 設定下載網址
  3. URL url = new URL("http://comment.bilibili.tv/29545595.xml");
  4. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  5. //conn.setRequestProperty("Accept-Encoding", "identity");
  6.  
  7. // 連線取得網頁輸入流
  8. conn.connect();
  9. System.out.printf("con.getContentEncoding()=%s\n",conn.getContentEncoding());
  10. InputStream in = conn.getInputStream();
  11.  
  12. if(conn.getContentEncoding().equals("gzip"))
  13. in = new GZIPInputStream(conn.getInputStream());
  14.  
  15. if(conn.getContentEncoding().equals("deflate"))
  16. in = new InflaterInputStream(conn.getInputStream(), new Inflater(true));
  17.  
  18. // 從網頁輸入流列印內容到螢幕
  19. BufferedReader bin = new BufferedReader(new InputStreamReader(in, "UTF-8"));
  20. String s = null;
  21. while((s=bin.readLine())!=null){
  22. System.out.println(s);
  23. }
  24. bin.close();