伺服器端**根據請求標頭 (特別是 `User-Agent`) 辨識客戶端類型**,返回不同內容 (如手機版/桌面版、API 版本、驗證頁面)。
| 標頭 | 瀏覽器 (Chrome) | Android 預設 (OkHttp/HttpURLConnection) |
|---|---|---|
| User-Agent | `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...` | `Dalvik/2.1.0 (Linux; U; Android 11; Pixel 5 Build/RQ3A.210805.001)` |
| Accept | `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8` | 常為 `*/*` 或未設定 |
| Accept-Language | `zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7` | 可能缺失或預設 `en-US` |
| Cookie | 完整 Cookie Jar | 需手動管理 `CookieManager` |
// OkHttp
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(chain -> {
Request req = chain.request().newBuilder()
.header("User-Agent", "Mozilla/5.0 (Linux; Android 10; Mobile) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36")
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
.build();
return chain.proceed(req);
})
.build();
// HttpURLConnection
conn.setRequestProperty("User-Agent", "Mozilla/5.0 ...");
conn.setRequestProperty("Accept", "text/html,...");
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cookieManager);
// OkHttp 自動使用系統 CookieHandler
若頁面內容由 JavaScript 渲染 (React/Vue/Angular),單純 HTTP 請求**無法獲得**完整 DOM。解決: