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

原创 2017年04月11日 16:27:31

简介

有一种需求是这样子,在注册这个功能上,利用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加载需要验证的图片。

版权声明:本文为博主原创文章,转载请带上出处,谢谢。

Android 加载需要携带cookie的图片请求

工具类:package com.project.jiashihu.network;import android.content.Context; import android.view.View; i...
  • qq_33716443
  • qq_33716443
  • 2017年10月27日 11:00
  • 168

Glide加载需要权限验证的图片Url

Glide默认加载的图片Url是可以公开访问的图片Url,我们的场景里访问图片Url需要带上Cookie信息,否则无法获取图片。解决办法是为图片请求加上头信息方法一是利用GlideModulepack...
  • wangkai0681080
  • wangkai0681080
  • 2016年01月16日 12:44
  • 5673

glide添加header请求

glide添加header GlideUrl glideUrl = new GlideUrl(url, new LazyHeaders.Builder() .addHeader(“Cookie”,...
  • binzai_16
  • binzai_16
  • 2016年12月12日 14:52
  • 581

使用GlideUrl无法加载网络图片

使用Glide无法加载网络图片
  • wl532882877
  • wl532882877
  • 2017年06月26日 14:52
  • 1617

使用Glide以及OkHttp集成

1、glide的使用: 添加依赖: compile 'com.github.bumptech.glide:glide:3.7.0'调用代码: ImageView imageView = (Ima...
  • dipolar
  • dipolar
  • 2016年02月23日 14:00
  • 5430

glide 集成okhttp3 解决https自签名证书问题

原创,转载请标明,文章来自----小紅仙 第一次使用上传图片真费劲。。。。。...
  • Qi18501967134
  • Qi18501967134
  • 2016年12月28日 12:49
  • 2360

Android客户端加载网站验证码(okHttp Jsoup)

本文使用okHttp+Jsoup,所需要的JAR请自行在网上下载,添加JAR的方式,参见http://blog.csdn.net/ervincm/article/details/67821256imp...
  • ervincm
  • ervincm
  • 2017年03月29日 02:07
  • 646

Glide加载有验证信息的Url图片

//Authorization 请求头信息 LazyHeaders headers= new LazyHeaders.Builder().addHeader("Authorization", tok...
  • huagbo
  • huagbo
  • 2017年03月14日 10:30
  • 621

Glide与OkHttp3集成

最近做毕设,android方面采用了很多以前没有使用过的库,比较各种图片加载库根据需要采用了Glide。鉴于Google官方在Android 6.0以后开始采用okhttp作为底层网络通信库,所以项目...
  • u010991947
  • u010991947
  • 2016年03月30日 15:18
  • 11815

用Cookie来实现计时器(发送手机验证码、邮箱)

当我们在一个网站上注册时,要根据手机号码来获取验证码,而验证码中包括一个时间计数器。我们用普通的Js时间时间计数时就会出现当我们刷新页面的时候验证码计数器部消失了。所以这里我们想到了用Js来操作Coo...
  • a1106900429
  • a1106900429
  • 2015年09月09日 14:53
  • 1154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Glide结合Okhttp做cookie管理实现注册需求的图片验证码短信验证码功能
举报原因:
原因补充:

(最多只允许输入30个字)