首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 獲取 GZIP 壓縮的 HTTP 響應並解壓獲取 HTML

     編輯:程式設計綜合問答

完整代碼

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.zip.GZIPInputStream;

public class GzipHttpFetcher {
    public static String fetch(String urlStr) throws IOException {
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("Accept-Encoding", "gzip, deflate"); // 聲明支援壓縮
        conn.setRequestProperty("User-Agent", "Mozilla/5.0");
        conn.connect();

        InputStream is = conn.getInputStream();
        // 判斷是否真的是 gzip
        String encoding = conn.getContentEncoding();
        if (encoding != null && encoding.contains("gzip")) {
            is = new GZIPInputStream(is);
        }
        // 讀取解壓後的內容
        try (BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line).append('\n');
            }
            return sb.toString();
        }
    }

    public static void main(String[] args) throws Exception {
        String html = fetch("https://example.com");
        System.out.println(html.substring(0, 500));
    }
}

關鍵點

  1. 請求頭加 Accept-Encoding: gzip, deflate,否則伺服器可能不壓縮直接返回明文。
  2. 響應頭 Content-Encoding: gzip 判斷,再包裝 GZIPInputStream。
  3. GZIPInputStream 會自動解壓,上層用 InputStreamReader 讀取字符流。
  4. 編碼指定 UTF-8(或從 Content-Type 解析 charset)。

進階:使用 Apache HttpClient / OkHttp


// OkHttp 自動處理 GZIP,無需手動代碼
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
try (Response response = client.newCall(request).execute()) {
    String html = response.body().string();
}
  • 生產環境**強烈建議用成熟 HTTP 客戶端**,自動處理壓縮、重定向、連接池、超時、TLS 等細節。

總結

核心三步:**請求頭聲明支援 gzip → 判斷響應頭 Content-Encoding → 用 GZIPInputStream 解壓讀取**。手寫僅適合學習/輕量場景,實際項目請用 OkHttp/HttpClient。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved