Glide结合Okhttp做cookie管理实现注册需求的图片验证码短信验证码功能

来源:互联网 发布:西门子触摸屏编程 编辑:程序博客网 时间:2024/05/26 12:57

简介

有一种需求是这样子,在注册这个功能上,利用cookie进行标识当前手机,进行短信验证码的获取。

流程是这样的(有点坑,csdn好像用代码画不了下面这个图):

这里写图片描述

这时候问题来了,我们需要获取Glide请求验证码的Cookie,这该怎么解决呢?

方法1

结合okhttp,Glide使用okhttp进行加载,然后okhttp进行cookie管理,发送请求获取短信验证码。

1. 导包

导入使得glide支持okhttp的包(注意后面有aar,就是代表导入aar的包,包含资源的。这里的这个包 包含了Manifest,里面有对应的服务等)

compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'

2. 定义cookie管理器类

自定义Okhttp的cookie管理,在Okhttp初始化的时候设置进去。

因为发送短信的请求需要利用图形验证码请求的cookie,所以cookie管理的逻辑就是,保存上一次请求的cookie,下一次请求的时候利用上一次请求的cookie。

    /**     * 特殊的自动管理Cookies     */    private class CookiesManager implements CookieJar {        //保存每个url的cookie        private HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();        //上一个请求url        private HttpUrl url;         @Override        public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {            //保存链接的cookie            cookieStore.put(httpUrl, list);            //保存上一次的url,供给下一次cookie的提取。            url = httpUrl;        }        @Override        public List<Cookie> loadForRequest(HttpUrl httpUrl) {            //加载上一个链接的cookie            List<Cookie> cookies = cookieStore.get(url);            return cookies != null ? cookies : new ArrayList<Cookie>();        }    }

3. Glide注册okhttp

        //初始化okhttp,        mOkHttpClient = new OkHttpClient.Builder()                .cookieJar(new CookiesManager())   //cookie管理                .build();        //不Register的话,图片请求不会经过OkHttpClient        Glide.get(MainActivity.this)                .register(          //使用okhttp作为图片请求                        GlideUrl.class                        ,InputStream.class                        ,new OkHttpUrlLoader.Factory(mOkHttpClient));

4. 加载图形验证码

如常加载,因为是图像验证码,所以这里禁止缓存。

Glide.with(MainActivity.this)                        .load(PicUrl)                        .skipMemoryCache(true)   //验证码不缓存                        .diskCacheStrategy(DiskCacheStrategy.NONE)                        .into(imageView);

这时候加载的Glide加载的图片就是用okhttp进行加载的了,所以会有保存到cookie。

5.请求短信验证码

获取图形验证码完毕之后,输入验证码到编辑框,然后继续请求短信验证码接口:

    private void postAsynHttp(String code) {        //请求短信验证码的接口        String url = SmsUrl+"?captcha="+code;        //创建请求        Request request = new Request.Builder()                .url(url)                .get()                .build();        final Call call = mOkHttpClient.newCall(request);        //在线程执行        new Thread(new Runnable() {            @Override            public void run() {                try {                    Response response = call.execute();                    //打印请求结果                    Log.e("@@", response.body().string());                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }

这就可以了。主要是cookie的管理。

方法2

图形验证码不要用Glide加载了。 直接用网络框架例如okhttp下载回来,但是cookie还是得用上面的方式管理。

注意: 这篇文章不是说Glide加载需要验证的图片。

2 0
原创粉丝点击