How to implement cookie handling on Android using OkHttp?

后端 未结 3 1739
一生所求
一生所求 2020-11-27 12:06

Using OkHttp by Square https://github.com/square/okhttp, how can I:

  1. Retrieve a cookie returned from the server
  2. Store the cookie for upcoming requests<
3条回答
  •  时光取名叫无心
    2020-11-27 13:08

    For OkHttp3, a simple accept-all, non-persistent CookieJar implementation can be as follows:

    OkHttpClient client = new OkHttpClient.Builder()
        .cookieJar(new CookieJar() {
            private final HashMap> cookieStore = new HashMap<>();
    
            @Override
            public void saveFromResponse(HttpUrl url, List cookies) {
                cookieStore.put(url, cookies);
            }
    
            @Override
            public List loadForRequest(HttpUrl url) {
                List cookies = cookieStore.get(url);
                return cookies != null ? cookies : new ArrayList();
            }
        })
        .build();
    

    Or if you prefer to use java.net.CookieManager, include okhttp-urlconnection in your project, which contains JavaNetCookieJar, a wrapper class that delegates to java.net.CookieHandler:

    dependencies {
        compile "com.squareup.okhttp3:okhttp:3.0.0"
        compile "com.squareup.okhttp3:okhttp-urlconnection:3.0.0"
    }
    

    CookieManager cookieManager = new CookieManager();
    cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
    OkHttpClient client = new OkHttpClient.Builder()
        .cookieJar(new JavaNetCookieJar(cookieManager))
        .build();
    

提交回复
热议问题