許多開發者一提到網路通訊就直奔 Socket,其實 java.net.URLConnection 封裝了 HTTP 協議細節,幾行代碼即可完成 GET/POST 請求,無需手寫 Socket 解析回應。本文以抓取 Yahoo 首頁為例,示範標準用法。
new URL(urlString) 建立 URL 物件url.openConnection() 取得 URLConnectionsetRequestProperty、setDoOutput(true) 等conn.getInputStream() 取得回應輸入流BufferedReader 逐行讀取並處理reader.close() 釋放資源import java.io.*;
import java.net.*;
public class URLClient {
public String getDocumentAt(String urlString) {
StringBuilder doc = new StringBuilder();
try {
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
// 可在此設定 User-Agent、Timeout 等
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
String line;
while ((line = reader.readLine()) != null) {
doc.append(line).append('\n');
}
}
} catch (MalformedURLException e) {
System.err.println("URL 格式錯誤: " + urlString);
} catch (IOException e) {
System.err.println("連線/讀取失敗: " + e.getMessage());
}
return doc.toString();
}
public static void main(String[] args) {
URLClient client = new URLClient();
String html = client.getDocumentAt("https://www.example.com");
System.out.println(html.substring(0, Math.min(500, html.length())) + "...");
}
}
conn.setDoOutput(true) 後,用 conn.getOutputStream() 寫入表單資料(key=value&key2=value2)。CookieManager 自動處理 Session。TrustManager。HttpClient 提供連線池、非同步、重試等企業級功能。URLConnection 是 JDK 隱藏的「秘密武器」:零依賴、API 簡潔、足夠應付簡單 HTTP 整合。下次需要呼叫 REST API 或抓網頁時,先評估它是否滿足需求,避免過度引入重型庫。