應用對 PHP 伺服器的 HTTP 請求,在 Android 5.1 上回傳正確 JSON(含城市列表),但在 4.4、4.0 上回傳 {"num":"0","city":{}},資料庫查詢行數也為 0。經多機型測試,確認與硬體無關,純屬系統版本差異。
在 PHP 回應前 error_log 記錄完整輸出 JSON,確認是否對所有版本都送出相同資料。檢查是否有針對 $_SERVER['HTTP_USER_AGENT'] 的判斷邏輯。
使用模擬器搭配 Wireshark,對比 5.1 與 4.4 的完整 HTTP 交握過程:請求 Header、回應碼、Content-Encoding、實際 Body 內容。
在有問題的 4.4 裝置上,請求其他公開 API(如 https://httpbin.org/get),若正常則問題在伺服器端;若仍異常,則是客戶端 HTTP 堆疊或程式碼問題。
// 建議使用 OkHttp 替代 HttpURLConnection,統一各版本行為
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override public void onResponse(Call call, Response response) {
String body = response.body().string();
// 統一處理回應
}
@Override public void onFailure(Call call, IOException e) { /* 錯誤處理 */ }
});
優先鎖定伺服器端是否一致回傳資料,再檢查網路層差異。引入成熟網路庫(OkHttp/Retrofit)可有效屏蔽系統版本差異。