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

Android POST 請求在局域網與家庭網絡表現不一致排查

     編輯:程式設計綜合問答

現象描述

  • 公司局域網(固定 IP):POST 成功,返回 200。
  • 家庭 Wi-Fi(路由器 DHCP,IP 192.168.1.100):POST 返回 404,但瀏覽器訪問 Tomcat 首頁正常。

根因分析

  1. 雙層 NAT/端口映射缺失:
    • 家庭網絡通常:光貓(公網 IP) → 無線路由器(私網網關) → 手機/電腦。
    • Tomcat 綁定在電腦 192.168.1.100:8080,手機訪問同網段 IP 理應直通,**但**若路由器開啟「AP 隔離」或「客戶端隔離」,無線設備間無法直接通訊。
  2. 請求路徑攜帶項目名:
    • 代碼中 baseURL = "https://10.0.2.2:8080/test/AddMessage",確認 Tomcat webapps/test 部署正常,Servlet 映射為 /AddMessage。
    • 404 可能因 web.xml 映射錯誤或項目未啟動,瀏覽器訪問首頁(/)不代表 Servlet 可用。
  3. HTTP 客戶端庫差異:
    • 公司網絡可能走代理,DefaultHttpClient 自動處理;家庭直連需正確設置 Host 頭。

排查步驟

  1. 手機瀏覽器直接訪問 https://192.168.1.100:8080/test/AddMessage(GET),看是否 404。
  2. 電腦命令行 curl -X POST https://192.168.1.100:8080/test/AddMessage -d "k=v" 驗證服務端邏輯。
  3. 路由器管理頁關閉「AP 隔離 / 無線隔離 / 客戶端隔離」。
  4. 電腦防火牆入站規則放行 8080,或暫時關閉防火牆測試。
  5. Android 代碼改用 HttpURLConnection 或 OkHttp,打印完整請求/響應頭。

代碼升級建議

OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
    .add("key", "value")
    .build();
Request request = new Request.Builder()
    .url("https://192.168.1.100:8080/test/AddMessage")
    .post(body)
    .build();

client.newCall(request).enqueue(new Callback() {
    @Override public void onFailure(Call call, IOException e) {
        Log.e("POST", "Network error", e);
    }
    @Override public void onResponse(Call call, Response response) throws IOException {
        Log.d("POST", "Code: " + response.code() + " Body: " + response.body().string());
    }
});

家庭網絡 409/404 高發於「無線隔離」開啟或防火牆攔截。瀏覽器能開首頁 ≠ POST 接口可用,務必用 curl/Postman 直擊接口地址驗證。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved