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

Android 與瀏覽器訪問同一 URL 返回不同資料:User-Agent 與 HTTP 標頭差異

     編輯:程式設計綜合問答

核心原因

伺服器端**根據請求標頭 (特別是 `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`

解決方案

  1. 模擬瀏覽器 User-Agent:
    
    // 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,...");
    
  2. 完整 Cookie 管理**:
    
    CookieManager cookieManager = new CookieManager();
    cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
    CookieHandler.setDefault(cookieManager);
    // OkHttp 自動使用系統 CookieHandler
    
  3. 抓包對比**:用 **Fiddler / Charles / Wireshark** 擷取瀏覽器與 App 的完整請求/回應,**逐標頭對比**,找出關鍵差異並補齊。

進階:動態渲染頁面 (SPA/JS 生成內容)

若頁面內容由 JavaScript 渲染 (React/Vue/Angular),單純 HTTP 請求**無法獲得**完整 DOM。解決:

  • 尋找 **API 端點** (XHR/Fetch 請求),直接呼叫 API 取得 JSON。
  • 使用 **Headless Browser** (Puppeteer, Playwright, Selenium) 在伺服器端渲染後取 HTML。
  • Android 端嵌入 **WebView** 載入頁面,注入 JS 擷取 `document.body.innerHTML` 回傳給 App。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved