1. 程式人生 > >[錯誤筆記]同一個HttpClient例項自動管理cookie

[錯誤筆記]同一個HttpClient例項自動管理cookie

問題描述

HttpClientpost模擬登入後,用get讀取內容為空:

問題分析:

post模擬登入經檢測沒有問題,那麼問題可能出現在

  • post後的會話沒有保持下來,所以get時對於伺服器我處於非登入狀態
  • http方法不對
  • get到的資訊編碼不對
  • 4.get到的資訊本來就是空的
  • 連接出現問題

逐一排查問題所在

  • 通過輸入地址直接訪問,得到正確資訊,所以用get方法沒問題。
  • 分析反饋的entit,狀態碼200,說明連線沒問題,編碼有出現chunk字樣。

綜上所訴,所以問題可能出現在編碼和會話身上,仔細檢查發現,模擬get方法和模擬post方法的httpclient是兩個例項。
然而httpclient4.X版本是同一個httpclient例項自動管理cookie

,新的httpclient沒有保持會話,所以取得的是未登入時的內容,然而未登入時,內容為空。

解決方案

讓模擬post方法和模擬get方法使用同一個HttpClient例項。

反思總結

當發現程式效果和預期效果不同時,應該順著程式完成流程,儘可能多的分析可能出現的錯誤,然後逐一排查,我一直覺得是編碼問題,在chunk上大費周章,結果沒有解決問題,等到第二天才恍然大悟是httpclient例項不同導致出現了問題。出現這種”白費功夫”的現象是因為自己對問題分析能力不足導致,還沒有養成“列舉問題所在-逐一排查”的習慣,以後還要多加思考。

分析問題-列舉可能-逐一排查(由易到難)

errorList.addCase
("……"); errorList.addCase("……"); errorList.addCase("……"); while(errorList.next()) { if(errorlist.isError) { system.out.printf("……"); break; } }