栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

23.2、Android -- OkHttp3 基础学习 自定义设置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

23.2、Android -- OkHttp3 基础学习 自定义设置

说明

一个项目中的网络请求肯定不止一个。多个的话就涉及到相同的请求信息,或者相同的信息过滤条件。
因此,就需要自定义OkHttp3设置。可以通过拦截器、过滤器实现

测试方法都是在test 测试用例中进行的

拦截器 应用拦截器
使用addInterceptor
	new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            //应用拦截器
            @NonNull
            @Override
            public Response intercept(@NonNull Chain chain) throws IOException {

                Request request = chain.request().newBuilder().addHeader("SystemType", "android")
                        .addHeader("version", "20220803.001.123")
                        .build();
                System.out.println("version2"+chain.request().headers("version"));
                Response response = chain.proceed(request);
                return response;
                //正常返回,不处理
                //return chain.proceed(chain.request());
            }
        }).build();
网络拦截器

使用addNetworkInterceptor

	new OkHttpClient.Builder().addNetworkInterceptor(new Interceptor() {
                    //网络拦截器
                    @NonNull
                    @Override
                    public Response intercept(@NonNull Chain chain) throws IOException {
                        System.out.println("version"+chain.request().headers("version"));
                        Request request = chain.request().newBuilder().addHeader("locDesc", "cwc")
                                .addHeader("userName", "lianmei")
                                .build();
                        Response response = chain.proceed(request);
                        return response;
                    }
                })
                .build();

备注
1、addInterceptor早于addNetworkInterceptor执行
2、addInterceptor是程序增加的,
addNetworkInterceptor是网络增加,可以获取addInterceptor的请求信息
3、addInterceptor不管有误网络都会执行,
addNetworkInterceptor,有网络是才执行,没有网络时不执行

过滤器最终代码

package com.pha.four;

import androidx.annotation.NonNull;

import org.junit.Test;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpSetting {
    @Test
    public void InterCeptorTest() {
        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            //应用拦截器
            @NonNull
            @Override
            public Response intercept(@NonNull Chain chain) throws IOException {

                Request request = chain.request().newBuilder().addHeader("SystemType", "android")
                        .addHeader("version", "20220803.001.123")
                        .build();
                System.out.println("version2"+chain.request().headers("version"));
                Response response = chain.proceed(request);
                return response;
                //正常返回,不处理
                //return chain.proceed(chain.request());
            }
        }).addNetworkInterceptor(new Interceptor() {
                    //网络拦截器
                    @NonNull
                    @Override
                    public Response intercept(@NonNull Chain chain) throws IOException {
                        System.out.println("version"+chain.request().headers("version"));
                        Request request = chain.request().newBuilder().addHeader("locDesc", "cwc")
                                .addHeader("userName", "lianmei")
                                .build();
                        Response response = chain.proceed(request);
                        return response;
                    }
                })
                .build();

        Request request = new Request.Builder().url("http://www.httpbin.org/get?a=2&b=3")
                .build();
        Call call = okHttpClient.newCall(request);
        Response response = null;
        try {
            response = call.execute();
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

缓存和cookie 缓存

通过.cache(new Cache(new File(“C:UsersCherry”),1024*1024)) 缓存

OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .cache(new Cache(new File("C:\Users\Cherry"),1024*1024))
                .build();
cookie

通过cookieJar(new CookieJar(){})记录到程序内
通过Map cookieMap = new HashMap<>(); 记录个网站的cookie 。

package com.pha.four;

import androidx.annotation.NonNull;

import org.junit.Test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpCookieTest {
    Map>  cookieMap = new HashMap<>();
    @Test
    public void CookieTest() {

        OkHttpClient okHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {
            //记录cookies
            @Override
            public void saveFromResponse(@NonNull HttpUrl httpUrl, @NonNull List list) {
                cookieMap.put(httpUrl.host() ,list);
            }

            @NonNull
            @Override
            public List loadForRequest(@NonNull HttpUrl httpUrl) {
                List cookies = OkHttpCookieTest.this.cookieMap.get(httpUrl.host());
                return cookies == null ? new ArrayList<>() : cookies;
            }
        }).build();
        FormBody formBody = new FormBody.Builder().add("username","ty082093105")
                .add("password","123123")
                .build();
        Request request = new Request.Builder().url("https://www.wanandroid.com/user/login")
                .post(formBody)
                .build();
        Call call = okHttpClient.newCall(request);
        try  {
            Response response = call.execute();
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }


        //使用cookies
        request = new Request.Builder().url("https://www.wanandroid.com/lg/collect/list/0/json")
                .build();
        call = okHttpClient.newCall(request);
        try  {
            Response response = call.execute();
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

记忆点

1、应用拦截器addInterceptor
2、网络拦截器addNetworkInterceptor
3、缓存cache
4、cookie记录:cookieJar(new CookieJar(){}).build()

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1036360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号