美文网首页
okhttp3带cookie请求

okhttp3带cookie请求

作者: baby_honour | 来源:发表于2018-07-11 17:04 被阅读732次

Request请求经常都要携带Cookie,request创建时可以通过header设置参数,Cookie也是参数之一。就像下面这样:

Request request =new Request.Builder()

     .url(url)

    .header("Cookie","xxx")

    .build();

然后可以从返回的response里得到新的Cookie,你可能得想办法把Cookie保存起来。

但是OkHttp可以不用我们管理Cookie,自动携带,保存和更新Cookie。

方法是在创建OkHttpClient设置管理Cookie的CookieJar

privatefinal HashMap> cookieStore =newHashMap<>();

OkHttpClient okHttpClient =new OkHttpClient.Builder()

    .cookieJar(new CookieJar() {

        @Override

        publicvoidsaveFromResponse(HttpUrl httpUrl, List list) {

            cookieStore.put(httpUrl.host(), list);

        }

        @Override

        publicList loadForRequest(HttpUrl httpUrl) {

            List cookies = cookieStore.get(httpUrl.host());

            returncookies !=null? cookies :newArrayList();

        }

    })

    .build();

这样以后发送Request都不用管Cookie这个参数也不用去response获取新Cookie什么的了。还能通过cookieStore获取当前保存的Cookie。


服务器使用shiro做登录校验及权限验证的时候,app端访问时就要带上cookie,不然请求会提示未登录

privatevoid postAsynHttp() {

        mOkHttpClient=new OkHttpClient.Builder() 

                .cookieJar(new CookieJar() { 

                    privatefinal HashMap> cookieStore =newHashMap<>(); 

                    @Override 

                    publicvoidsaveFromResponse(HttpUrl url, List cookies) { 

                        cookieStore.put(url, cookies); 

                        cookieStore.put(HttpUrl.parse("http://192.168.31.231:8080/shiro-2"), cookies); 

                        for(Cookie cookie:cookies){ 

                            System.out.println("cookie Name:"+cookie.name()); 

                            System.out.println("cookie Path:"+cookie.path()); 

                        } 

                    } 

                    @Override 

                    publicList loadForRequest(HttpUrl url) { 

                        List cookies = cookieStore.get(HttpUrl.parse("http://192.168.31.231:8080/shiro-2")); 

                        if(cookies==null){ 

                            System.out.println("没加载到cookie"); 

                        } 

                        returncookies !=null? cookies :newArrayList(); 

                    } 

                }) 

                .build(); 

        RequestBody formBody =new FormBody.Builder() 

                .add("username","admin") 

                .add("password","admin") 

                .build(); 

        final Request request =new Request.Builder() 

                .url("http://192.168.31.231:8080/shiro-2/shiro-login") 

                .post(formBody) 

                .build(); 

        Call call = mOkHttpClient.newCall(request); 

        call.enqueue(new Callback() { 

            @Override 

            publicvoid onFailure(Call call, IOException e) { 

            } 

            @Override 

            publicvoid onResponse(Call call, Response response) throws IOException { 

                String str = response.body().string(); 

                Log.i("wangshu", str); 

                runOnUiThread(new Runnable() { 

                    @Override 

                    publicvoid run() { 

                        showProgress(false); 

                        Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show(); 

                    } 

                }); 

            } 

        }); 

    } 

相关文章

网友评论

      本文标题:okhttp3带cookie请求

      本文链接:https://www.haomeiwen.com/subject/okahpftx.html