Okhttp-LoggingInterceptor的简单使用

这篇具有很好参考价值的文章主要介绍了Okhttp-LoggingInterceptor的简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

Okhttp除了提供强大的get,post网络请求外,还包含请求日志的拦截器,可以监视,重写,重试调用请求。

简单使用

我们在构造OkHttpClient时,通过addInterceptor()方法添加我们需要的过滤器。

   object OkhttpUtils{
    ……
    private var client:OkHttpClient

    //init方法在kotlin静态类中,是最先被调用的方法
    init {
        val httpLoggingInterceptor = HttpLoggingInterceptor()
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
        //构造Http对象
        client = OkHttpClient().newBuilder()
            .connectTimeout(10L, TimeUnit.SECONDS)
            .readTimeout(10L, TimeUnit.SECONDS)
            .writeTimeout(10L, TimeUnit.SECONDS)
            .addInterceptor(httpLoggingInterceptor)
            .build()
    }
    
    ……
   }
httpLoggingInterceptor

使用默认的httpLoggingInterceptor打印日志如下,可以发现,除了关键信息外,还有一些冗余或者很长的非关键日志,我们可以通过自定义日志过滤器找到我们需要的信息。

Okhttp-LoggingInterceptor的简单使用,Android基础,okhttp

 自定义LoggingInterceptor

1:写一个类,实现Interceptor接口,复写intercept(chain:Interceptor.Chain):Response{}方法

package com.example.okhttp.http

import android.util.Log
import okhttp3.Interceptor
import okhttp3.MediaType
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response
import okhttp3.ResponseBody
import okhttp3.ResponseBody.Companion.toResponseBody
import okio.Buffer

class TypeInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val time = System.currentTimeMillis()
        //获取request
        val request = chain.request()
        //request.body转字符串
        val str = request.body?.toString() ?: "request.body is null"
        Log.d(
            Hiokhttp.TAG, String.format(
                "sending request url is %s with body is %s",
                request.url, str
            )
        )
        //获取response,因为okhttp的原理,response.body在获取一次以后,
        //就不能再生成响应流了,因此需要构造一个新的返回
        val response = chain.proceed(request = request)
        //将response的数据保存到新的response
        val data: String = response.body?.string() ?: "response.body is null"

        //构建新的response
        val medieType = request.body?.contentType()
        val newBody = data.toResponseBody(medieType)
        val end = System.currentTimeMillis()
        Log.d(
            Hiokhttp.TAG, String.format(
                "received url is %s with host time %.1f ms ",
                request.url, (end - time) / 1e3
            )
        )
        return response.newBuilder().body(newBody).build()

    }
}

下面看一下效果,我们将请求url和请求体,以及花费时间 成功打印了出来,避免冗余繁琐的日志。

Okhttp-LoggingInterceptor的简单使用,Android基础,okhttp

 文章来源地址https://www.toymoban.com/news/detail-599779.html

到了这里,关于Okhttp-LoggingInterceptor的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android OkHttp/Retrofit框架使用Interceptor 抓包/mock数据

    在Android业务开发中,抓包/mock数据一般有 两种方案 (该篇主要介绍第 二 种方案): 前提: 网络库使用的是okhttp或Retrofit。 这里就用到了okhttp框架的原理定义一个 MockDataInterceptor 【Mock数据拦截器】,并在创建Builder实例的时候直接使用 addIntercepter 【 应用拦截器 】添加 Moc

    2024年02月07日
    浏览(37)
  • android开发使用OkHttp自带的WebSocket实现IM功能

    目录 一、背景 二、在项目中添加依赖包 三、框架调用 1、配置OkHttpClient  2、调用Url,构建WebSocket请求 3、建立连接 4、使用WebSocket对象发送消息     android app开发经常会有IM需求,很多新手不晓得如何入手,难点在于通讯不中断。其实android发展到今天,很多技术都很完善,有

    2024年02月08日
    浏览(39)
  • Android中okhttp的websocket的详细使用方法(加断线重连)

    介绍之类的就不多讲了,懒得讲也未必有别人整理的清晰,直接上代码 使用:

    2024年02月15日
    浏览(33)
  • okhttp源码简单流程分析

    拦截器详细解析可以看大佬简书 \\\"https://www.jianshu.com/p/6fac73f7570f\\\"和 “https://www.jianshu.com/p/3c740829475c” okhttp请求流程 1:OkHttpClient okHttpClient = new OkHttpClient.Builder() 构建一个okhttpClient对象,传入你想传入的对象,不传就是默认的; 2:构建request对象 Request request = new Request.Builder(

    2024年02月12日
    浏览(29)
  • Android---OkHttp详解

    OkHttp 是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。对于 Android App,OkHttp 现在几乎已经占据了所有的网络请求操作。 RetroFit + OkHttp 实现网络请求似乎成了一种标配。 因此,它也是每个 Android 开发工程师的必备技能。了解

    2024年01月19日
    浏览(39)
  • Android OKHttp源码解析

    Https是Http协议加上下一层的SSL/TSL协议组成的,TSL是SSL的后继版本,差别很小,可以理解为一个东西。进行Https连接时,会先进行TSL的握手,完成证书认证操作,产生对称加密的公钥、加密套件等参数。之后就可以使用这个公钥进行对称加密了。 Https的加密方式同时使用了非对

    2023年04月10日
    浏览(33)
  • Android Okhttp 源码浅析三

    添加网络事件拦截器 Interceptor val chain = RealInterceptorChain(         call = this,         interceptors = interceptors,         index = 0,         exchange = null,         request = originalRequest,         connectTimeoutMillis = client.connectTimeoutMillis,         readTimeoutMillis = client.readTimeoutMillis,      

    2024年02月11日
    浏览(38)
  • Android OkHttp 源码浅析一

    演进之路:原生Android框架不好用 ---- HttpUrlConnect   和 Apache HTTPClient   第一版  底层使用HTTPURLConnect   第二版 Square构建 从Android4.4开始 基本使用: 同步方法,Deque 双向队列 executableCalls 添加到calls 然后取出遍历 执行 executeOn runningAsyncCalls 正在执行的Call    for (i in 0 until e

    2024年02月11日
    浏览(38)
  • Android OkHttp 源码浅析二

    OkHttp 配置参数: dispatcher 用于线程调度 connectionPool 连接池  64 个or 5 host 可以提升复用性 方便管理和提升性能 interceptors  networkInterceptors eventListenerFactory 事件监听器 连接建立 发送head body 等 retryOnConnectionFailure 连接 / 请求 失败是否重置 authenticator 自动认证修正 比如

    2024年02月11日
    浏览(34)
  • Android OkHttp源码阅读详解一

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家 👉点击跳转到教程 前言:源码阅读基于okhttp:3.10.0 Android中OkHttp源码阅读二(责任链模式) 1、首先回顾OkHttp的使用 2、OkHttp源码阅读之线程池详解 3、守护线程详解 4、根据OkHttp中构

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包