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

Java 實作 Cookie 自動管理:解決 QQ 機器人登入驗證難題

     編輯:程式設計綜合問答

開發 QQ 機器人時,最讓初學者頭痛的莫過於「需要 Cookie 才能存取的網址」這類驗證機制。以 QQ 登入流程為例,首先請求 https://ssl.ptlogin2.qq.com/ptqrshow?appid=501004106&e=0&l=M&s=5&d=72&v=4&t=0.4139144900254905 取得二維碼與初始 Cookie,接著必須攜帶該 Cookie 才能呼叫 ptqrlogin 介面完成掃碼驗證。若在程式碼中手動拼接 Cookie 极易出錯,且難以應對動態更新的情況。

核心解法:使用 HttpClient 自動處理 Cookie

Java 生態中成熟的 Apache HttpClient 內建 CookieStore 機制,能自動完成「攔截 Set-Cookie → 儲存 → 後續請求自動帶上」的完整流程。具體步驟如下:

  1. 建立 CloseableHttpClient 實例,並掛載 BasicCookieStore。
  2. 發送第一次 GET 請求(ptqrshow),HttpClient 會自動將回應標頭中的 Set-Cookie 寫入 CookieStore。
  3. 後續發送 ptqrlogin 請求時,同一個 HttpClient 會自動把 CookieStore 裡符合域名/路徑的 Cookie 加入 Cookie 標頭,完全無需手動操作字串。

實戰程式碼片段

// 1. 準備自動管理 Cookie 的客戶端
CookieStore cookieStore = new BasicCookieStore();
CloseableHttpClient client = HttpClients.custom()
        .setDefaultCookieStore(cookieStore)
        .build();

// 2. 第一步:取得二維碼並自動接收 Cookie
HttpGet getQr = new HttpGet("https://ssl.ptlogin2.qq.com/ptqrshow?appid=501004106&e=0&l=M&s=5&d=72&v=4");
try (CloseableHttpResponse resp = client.execute(getQr)) {
    // 此處可讀取 resp.getEntity() 取得圖片流
    // Cookie 已自動存入 cookieStore
}

// 3. 第二步:攜帶 Cookie 輪詢掃碼狀態
HttpGet checkLogin = new HttpGet("https://ssl.ptlogin2.qq.com/ptqrlogin?webqq_type=10&remember_uin=1&login2qq=1&aid=501004106...");
try (CloseableHttpResponse resp = client.execute(checkLogin)) {
    String result = EntityUtils.toString(resp.getEntity());
    // 解析 result 判斷是否登入成功
}

除錯利器:Fiddler 抓包驗證流程

若仍遇到「程式碼能跑但就是登不進去」的情況,建議啟動 Fiddler 抓取瀏覽器與程式的完整 HTTP 交互,重點比對:

  • Request Header 中 Cookie 欄位是否一致
  • 重導向(302)鏈路是否完整
  • 關鍵參數(pt_local_token、login_sig 等)是否遺漏

通過對比,能快速定位「少傳了哪個 Header」或「參數編碼錯誤」等問題。

常見坑點提醒

  • User-Agent:部分驗證介面會檢查 UA,建議模擬常見瀏覽器字串。
  • Referer:QQ 登入頁面要求 Referer 必須來自 https://xui.ptlogin2.qq.com/ 或同域頁面。
  • HTTPS 憑證:測試環境若遇憑證信任問題,可暫時採用 TrustAllStrategy(僅限開發階段)。

掌握 HttpClient 的 Cookie 自動管理,不僅能輕鬆攻克 QQ 機器人登入,同樣適用於所有「需維持 Session 狀態」的爬蟲與自動化場景。下次再遇到「手動拼 Cookie」的誘惑,請直接丟給 CookieStore 處理吧!

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