我遇到了OkHttp和Cookies管理的麻煩。使用CookieHandler與OkHttp和改造2
我正在用CookieManager創建一個帶有自定義OkHttpClient的Retrofit客戶端。
final OkHttpClient okHttpClient = new OkHttpClient();
mCookieHandler = new CookieManager();
okHttpClient.setCookieHandler(mCookieHandler);
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.mysite.com/")
.client(okHttpClient)
.addConverter(String.class, new StringConverter())
.build();
我有那麼回答我一個權威性的cookie,如果我的登錄是很好的一個身份驗證請求:
interface AuthService {
@POST
@FormUrlEncoded
Call<String> auth(@Url String url,
@Field("login") String login,
@Field("password") String password);
}
使用這樣的:
mAuthService = retrofit.create(AuthService.class);
mAuthService.auth("https://auth.mysite.com/some/path", "mylogin", "mypassword")
.enqueue(new AuthCallback());
在此的響應頭請求,我有這樣的一個:
Set-Cookie: auth=someauthkey468TYUIYTYUY; path=/; domain=.mysite.com
請求後,如果我看上去的cookie處理程序的裏面,有在cookie存儲的地圖一個條目:
key = http://auth.mysite.com
value = a list of cookie with only auth=someauthkey468TYUIYTYUY
在這一點上,任何東西都工作良好。我的認證cookie完全存儲在cookie處理程序中。
但現在,我想執行的請求下載一些數據與其它服務:
interface UserService {
@GET("user") // remember that the base url of retrofit is http://api.mysite.com/
Call<String> getMyCurrentInfo();
}
retrofit.create(UserService.class).getMyCurrentInfo().execute();
在這裏,我預計OkHttp添加存儲在cookie處理程序對這一請求之前接收到的Cookie,但OkHttp沒有添加標題! 該cookie從不發送回服務器。 :(
是不是有與cookie處理程序和OkHttp或工作的東西我在試圖做一些事情是不可能的(除非手動添加標題)還是我只是壞,有的地方失敗了嗎?
謝謝您的幫助!
很多相關的帖子嗯,這是不幸的。我將實現一個自定義攔截器,它會自動添加我的cookie ...謝謝 – pdegand59
@ pdegand59或Ilya,你可以發表一個如何做這個自定義攔截器的小例子嗎? – Jan
與Jan有同樣的問題,所以這裏是鏈接是有人來搜索的情況:https://github.com/square/okhttp/wiki/Interceptors – AVS