ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

andorid jar/库源码解析之okhttp3

2020-04-25 13:53:21  阅读:337  来源: 互联网

标签:对象 Request Builder jar OkHttpClient url 源码 andorid Response


目录:andorid jar/库源码解析 

Okhttp3:

  作用:

    用于网络编程(http,https)的快速开发。

  栗子:

// okHttpClient定义成全局静态,或者单例,不然重复new可能导致连接数耗尽
OkHttpClient okHttpClient = new OkHttpClient();
String url = "https://www.test.com";
byte[] data = new byte[] { 1 };

okhttp3.RequestBody body = okhttp3.RequestBody.create(MediaType.parse("application/octet-stream"), data);

// Request
Request request = new Request.Builder().addHeader("Authorization", "Bearer XXXXXXXX").url(url).post(body).build();

// Response
Response response = okHttpClient.newBuilder().build().newCall(request).execute();

// 注意:这里是string不是toString
final String msg = response.body().string();

  源码解读:

  

  ①:创建OkHttpClient对象,同时赋值默认值

  ②:返回一个 RequestBody对象,该对象包含,类型,长度,和写入数据的方法。

  ③:创建一个Request$Builder对象,默认使用GET请求,对addHeader进行添加到List<String>集合中,name,value.trim(),一个header用两条。

  ④:赋值请求地址,同时特殊处理ws->http,wss->https。对url进行拆分解析,.得到url中的schema,host,port,name,password,path等

  ⑤:赋值RequestBody和method成POST

  ⑥:用所有的Request$Builder成员,初始化一个Request对象。

  ⑦:用OkHttpClient对象的默认值,初始化一个OkHttpClient$Builder对象

  ⑧:返回一个OkHttpClient对象,值来自OkHttpClient$Builder

  ⑨:通过OkHttpClient和Request构造一个,RealCall对象。

  ⑩:调用RealCall的execute方法。a>把RealCall对象添加到,运行Call的集合中。b>创建 RealInterceptorChain 对象进行通讯。 c> 调用 proceed 方法。。d> 创建 List<Interceptor> 集合。循环调用 Interceptor的intercept方法,进行处理请求。的细节。

    顺序: RetryAndFollowUpInterceptor、BridgeInterceptor、CacheInterceptor、ConnectInterceptor、networkInterceptors、CallServerInterceptor

    最后在CallServerInterceptor 中的intercept中。执行创建一个 RealBufferedSink 对象,用于写入数据(post内容),然后调用finishRequest。

    读取readResponseHeaders ,得到 Response.Builder 对象,使用这个对象,构造一个Response对象,把request,超时等信息,赋值到response上,判断response.code==100,重新readResponseHeaders,更新code的值。

    调用responseHeadersEnd,完成读取同步,然后读取body:openResponseBody,得到 ResponseBody对象。赋值给Response对象,返回

  ⑪:得到ResponseBody对象而已,没啥说的

  ⑫:使用Okio 读取数据,并且返回(因为是流读取,所以只能调用一次)

  引入:

implementation 'com.squareup.okhttp3:okhttp:3.12.1'

 

标签:对象,Request,Builder,jar,OkHttpClient,url,源码,andorid,Response
来源: https://www.cnblogs.com/Supperlitt/p/12772798.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有