您的位置:首页 > 理论基础 > 计算机网络

Android Okhttp框架获取cookie

2018-01-30 18:18 246 查看
Android 中经常会用到Okhttp网络框架,有时在获取服务器数据时服务器要通过这次请求请求方的一些信息 比如cookie 

这时就需要配置

此处以Okhttp的Post请求为例

public Observable<String> post(final String url, final Map<String,String> params){

        //创建被观察者

        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>(){

            @Override

            public void call(Subscriber<? super String> subscriber) {

                final Subscriber mSubscriber=subscriber;

                //没有取消订阅的时候

                if(!mSubscriber.isUnsubscribed()){

                    //获取FormBody.Builder 对象

                    FormBody.Builder builder=new FormBody.Builder();

                    //遍历params 将其放入到FormBody.Builder 对象

                    if(params!=null&&!params.isEmpty()){

                        for(Map.Entry<String, String> entry :params.entrySet()){

                            builder.add(entry.getKey(), entry.getValue());

                        }

                    }

                    //获取RequestBody 对象

                    RequestBody requestBody = builder.build();

                    //构建post请求

                    Request request=null;

                    String cookie=CliniciansApplication.getOkhttpCookie();

                    if(!BooleanUtils.isEmpty(cookie)){

                        request=new Request.Builder()

                                .addHeader("cookie",cookie)

                                .url(url)

                                .post(requestBody)

                                .build();

                    }else{

                        request=new Request.Builder()

                                .url(url)

                                .post(requestBody)

                                .build();

                    }

                    if(mOkHttpClient!=null){

                        mOkHttpClient.newCall(request).enqueue(new Callback() {

                            @Override

                            public void onFailure(Call call, IOException e) {

                                //通知订阅者的错误信息

                                mSubscriber.onError(e);

                            }

                            @Override

                            public void onResponse(Call call, Response response) throws IOException {

                                if(null!=response){//response 不为空

                                    if(response.isSuccessful()){//response 请求成功

                                        Headers headers=response.headers();

                                        List<String> cookies=headers.values("Set-Cookie");

                                        if(cookies.size()>0){

                                            String session=cookies.get(0);

                                            String result=session.substring(0,session.indexOf(";"));

                                            CliniciansApplication.setOkhttpCookie(result);

                                        }

                                        //通知订阅者的成功信息

                                        mSubscriber.onNext(response.body().string());

                                    }else{//response 请求失败

                                        //通知订阅者的错误信息

                                        IOException IOExceptionx=new IOException();

                                        mSubscriber.onError(IOExceptionx);

                                    }

                                }else{//response 为空

                                    //通知订阅者的错误信息

                                    IOException IOExceptionx=new IOException();

                                    mSubscriber.onError(IOExceptionx);

                                }

                                //通知完毕

                                mSubscriber.onCompleted();

                            }

                        });

                    }

                }

            }

        });

        return observable;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息