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

Java 模擬登錄保持 Session:HttpURLConnection 手動管理 Cookie 實現

     編輯:程式設計綜合問答

模擬登錄後訪問需登錄頁面,核心是**獲取登錄響應的 Set-Cookie,後續請求帶上 Cookie**。

完整流程代碼

// 1. 登錄請求
URL loginUrl = new URL("https://localhost/ONCAPS/login.php");
HttpURLConnection conn = (HttpURLConnection) loginUrl.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("User-Agent", "Mozilla/5.0");

String params = "user_id=test1&password=123456";
try (OutputStream os = conn.getOutputStream()) {
    os.write(params.getBytes(StandardCharsets.UTF_8));
}

// 2. 獲取 Session Cookie
String sessionCookie = conn.getHeaderField("Set-Cookie"); // 如 JSESSIONID=abc123; Path=/
System.out.println("Cookie: " + sessionCookie);

// 3. 訪問受保護資源
URL infoUrl = new URL("https://localhost/ONCAPS/userInfo.php");
HttpURLConnection conn2 = (HttpURLConnection) infoUrl.openConnection();
conn2.setRequestProperty("Cookie", sessionCookie); // 關鍵:帶上 Cookie
conn2.setRequestProperty("User-Agent", "Mozilla/5.0");

try (BufferedReader br = new BufferedReader(new InputStreamReader(conn2.getInputStream()))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
}

關鍵點

  • setDoOutput(true) 必須在 getOutputStream() 前調用。
  • Set-Cookie 可能包含多個 Cookie,需完整保存並原樣發回。
  • 生產環境建議用 **Apache HttpClient / OkHttp**,自動管理 CookieStore、連接池、重試。
  • HTTPS 站點需配置信任所有證書(僅測試)或導入 CA 證書。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved