Java 標準庫 java.net 提供了 HttpURLConnection,無需第三方依賴即可完成 HTTP 請求。下面以抓取百度首頁為例,演示核心流程:建立連接 → 設置超時 → 讀取輸入流 → 寫入字節數組。
URL url = new URL("https://www.baidu.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000); // 連接超時 5 秒
conn.setReadTimeout(30000); // 讀取超時 30 秒
try (DataInputStream in = new DataInputStream(conn.getInputStream())) {
byte[] buffer = new byte[8192];
int len;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((len = in.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
byte[] content = baos.toByteArray(); // 現在 content 擁有完整頁面數據
// 後續可寫入文件、解析 HTML、轉字符串等
System.out.println("下載完成,大小:" + content.length + " 字節");
}
ByteArrayOutputStream 累積字節,避免預先分配巨大數組;若文件極大,建議直接寫入 FileOutputStream 落地。Content-Type 頭獲取,或用 new String(content, "UTF-8") 轉字符串。IOException、SocketTimeoutException 等。robots.txt 並控制並發頻率。import java.io.*;
import java.net.*;
public class SimpleWebFetcher {
public static void main(String[] args) {
String target = "https://www.baidu.com";
try {
URL url = new URL(target);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(30000);
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Java Fetcher)");
try (InputStream in = conn.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream()) {
byte[] buf = new byte[8192];
int n;
while ((n = in.read(buf)) != -1) out.write(buf, 0, n);
byte[] data = out.toByteArray();
System.out.printf("抓取 %s 完成,狀態碼 %d,大小 %d bytes%n",
target, conn.getResponseCode(), data.length);
// Files.write(Paths.get("baidu.html"), data); // 如需存檔
}
} catch (IOException e) {
System.err.println("抓取失敗:" + e.getMessage());
}
}
}