我正在使用Retrofit(1.7.1),它使用默認的OkHttp(2.1.0)客戶端(我猜)在服務器上進行身份驗證,並獲得一些會話Cookie來回復每個其他請求。如何在OkHttp中設置cookie格式?
我有一個CookieManager和一個設置「Cookie」標頭的攔截器。
攔截器構建的cookie作爲
cookieName + "=" + cookieValue + "; "
(實際上我用一個StringWriter的,但結果它相同)
正確的頭的結果應該是:
Cookie: PHPSESSID=<my_php_sess_id>; session=<my_session_id>;
但
默認實現(OkHttp我猜)添加另一個Cookie h EADER導致:
Cookie: PHPSESSID=<my_php_sess_id>; session=<my_session_id>;
Cookie: $Version="1"; PHPSESSID="<my_php_sess_id>";$Path="/";$Domain="<my_domain>"; session="<my_session_id>";$Path="/";$Domain="<my_domain>"
我能找到的第二報頭檢查僅使用Wireshark網絡的分組,所有的庫日誌僅示出了第一個。
我覺得這第二個標題會導致一些麻煩:請注意圍繞cookie值的引號。
有沒有辦法告訴OkHttp或Retrofit使用「普通」版本的cookie?
也許我誤解了所有的整個的Cookie /客戶機/攔截機制,但改造的客戶端設置爲:
.setClient(new ApacheClient(new DefaultHttpClient()))
解決了這個問題。
預先感謝您
您是否發現使用OkHttp而不是DefaultHttpClient的解決方案? – 2015-07-20 11:42:57
我更新了包括2014年12月使用的Retrofit和OkHttp版本的問題。從那時起,我沒有再試過。你有更新版本的相同問題嗎? – Gnafu 2015-07-21 15:36:05
我找到了一個解決辦法,強制cookie版本爲0.我會寫一個答案。 – 2015-07-22 08:56:35