android获取cookie

最近一直在使用玩android开放的API做一个项目,在收藏接口的时候遇到了问题,登陆成功后在点击收藏还是提示未登录,然后慢慢接触到了cookie
此项目的接口数据来源于玩Android
思路:
在这里插入图片描述
使用postman模拟请求数据登录之前我们可以看到Temporary Headers中有一个Cookie字段,现在的值就是默认显示的内容
当我们登录成功后cookie字段的内容为:
在这里插入图片描述
可以看到postman帮我们报存了cookie中的内容,这样当我们进行收藏等操作的时候就可以操作成功,但是android中不会自动将cookie进行报存

直接进入主题:

@FormUrlEncoded
    @POST("user/login")//登录接口数据
    fun logintext(@Field("username") username:String,@Field("password") password:String):rx.Observable<Response<LoginBean>>

主活动代码:

   private void onClick(View v) {
        final String address = "https://www.wanandroid.com/";
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(address)//基础URL 建议以 / 结尾
                .addConverterFactory(GsonConverterFactory.create())//设置 Json 转换器
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//RxJava 适配器
                .build();
        API workPlaneService = retrofit.create(API.class);
        workPlaneService
                .logintext("yuhang66", "123456")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Response<LoginBean>>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i("eraaa", e.toString());
                    }

                    @Override
                    public void onNext(Response<LoginBean> loginBeanResponse) {
                        Headers headers = loginBeanResponse.headers();//我们通过Response的headers对象获取到响应头信息。
                        List<String> values = headers.values("Set-Cookie");//通过“Set-Cookie”字段获取到服务器返回的Cookie信息

                        for (String s : values) {
                            Log.e("ohmys", s);
                        }
                        Log.e("ohmys", "@" + values);//这里responseBodyResponse.body()获取的就是ResultBean对象
                        initText(values);//登录成功后 发起收藏页面的请求
                    }
                });
    }

 private void initText(final List<String> values) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //这是一个查询产品详细信息的接口
                FormBody contentBody = new FormBody.Builder()
                        .add("id", "2334")
                        .build();
                //将cookie信息放到请求头中去
                Request contentRequest = new Request.Builder()
                        .url("https://www.wanandroid.com/lg/collect/1165/json")
                        .header("Cookie", values.toString())//添加cookie
                        .post(contentBody)
                        .build();


                okhttp3.Call contentCall = client.httpClient.newCall(contentRequest);
                try {
                    okhttp3.Response contentResponse = contentCall.execute();
                    String contentResult = contentResponse.body().string();
                    Log.d("lalala", contentResult);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

这样就可以收藏成功了
要将cookie进行持久化的话 你可以使用SharedPerference等其他方法进行报存到android中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章