Dan*_*iel 46 cookies android okhttp
使用OkHttp by Square https://github.com/square/okhttp,我该怎么做:
理想情况下,每次请求都会自动存储,重新发送和更新cookie.
hid*_*dro 61
对于OkHttp3,一个简单的accept-all,非持久化CookieJar
实现可以如下:
OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url, cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url);
return cookies != null ? cookies : new ArrayList<Cookie>();
}
})
.build();
Run Code Online (Sandbox Code Playgroud)
或者如果您更喜欢使用java.net.CookieManager
,请okhttp-urlconnection
在您的项目中包含JavaNetCookieJar
一个包含在其中的包装类java.net.CookieHandler
:
dependencies {
compile "com.squareup.okhttp3:okhttp:3.0.0"
compile "com.squareup.okhttp3:okhttp-urlconnection:3.0.0"
}
Run Code Online (Sandbox Code Playgroud)
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(new JavaNetCookieJar(cookieManager))
.build();
Run Code Online (Sandbox Code Playgroud)
Mig*_*gne 33
在OkHttp 3之前,您可以将CookieHandler传递给OkHttpClient实例.您可以使用java.net中的CookieManager实现,也可以根据需要实现自己的实现.选择最适合您需求的政策.
OkHttpClient client = new OkHttpClient();
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
client.setCookieHandler(cookieManager);
Run Code Online (Sandbox Code Playgroud)
OkHttp会将从响应中收到的cookie保存到CookieHandler中,并在发送请求时从中读取.它将匹配请求/响应URI.
我需要共享默认的Cookie Jar(CookieManager.getInstance()),所以这对我来说似乎没问题.
return new CookieJar() {
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
CookieManager cookieManager = CookieManager.getInstance();
for (Cookie cookie : cookies) {
cookieManager.setCookie(url.toString(), cookie.toString());
}
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
CookieManager cookieManager = CookieManager.getInstance();
List<Cookie> cookies = new ArrayList<>();
if (cookieManager.getCookie(url.toString()) != null) {
String[] splitCookies = cookieManager.getCookie(url.toString()).split("[,;]");
for (int i=0; i<splitCookies.length; i++) {
cookies.add(Cookie.parse(url, splitCookies[i].trim()));
}
}
return cookies;
}
};
Run Code Online (Sandbox Code Playgroud)