Android网络框架OkHttp源码分析(1)——请求流程

Android网络框架——OkHttp源码分析前言OkHttp是一个处理网络请求的高性能框架,由Square公司贡献。它的出现替代了HttpUrlConnection和Apache HttpClient。OkHttp采用了分层设计的思想,使用多层拦截器,每个拦截器解决一个问题,多层拦截器套在一起,就像设计模式中的装饰者模式一样,可以在保证每层功能高内聚的情况下,解决多样性的问题。OkHttp源码的讲解可以分为两大部分:请求流程拦截器分析接下来讲解第一部分:okhttp3源码分析之请求流
摘要由CSDN通过智能技术生成

Android网络框架——OkHttp源码分析

前言

OkHttp是一个处理网络请求的高性能框架,由Square公司贡献
它的出现替代了HttpUrlConnectionApache HttpClient

OkHttp采用了分层设计的思想,使用多层拦截器,每个拦截器解决一个问题,多层拦截器套在一起,就像设计模式中的装饰者模式一样,可以在保证每层功能高内聚的情况下,解决多样性的问题。

OkHttp源码的讲解可以分为两大部分:

  • 请求流程
  • 拦截器分析

接下来讲解第一部分:

okhttp3源码分析之请求流程(同步,异步)

我们通过一个简单的GET请求来回忆一下OkHttp的使用步骤,并以这个实例为例讲解OkHttp的请求流程,如下:

OkHttp的简单使用
//第一步、创建OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
    .build();

//第二步、创建请求Request
Request request = new Request.Builder()
    .url("http://github.com")
    .build();
    
//第三步、创建一个Call,用于发起网络请求
Call call = client.newCall(request);

//第四步、发起异步请求, 调用Call的enqueue()方法(同步用execute()方法)
call.enqueue(new Callback() {
   
    @Override
    public void onFailure(Call call, IOException e) {
   
    	//请求失败处理
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
   
		//请求成功处理
    }
});

可以看见使用OkHttp 发送网络请求需要四个步骤:

  1. 创建OkHttpClient
  2. 创建请求Request
  3. 创建Call,其用于发送网络请求
  4. 调用Call的enqueue()或execute()方法发起异步或同步请求

下面将介绍每一个步骤:

1.创建OkHttpClient
//第一步、创建OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
    .build();

OkHttpClient相当于OkHttp的大总管,它负责将每一个具体的工作发放给每个员工,
接下来一起看看OkHttpClient.Builder()中的各个参数:

 public Builder() {
   
      dispatcher = new Dispatcher();// 调度器
      protocols = DEFAULT_PROTOCOLS;// HTTP 协议
      connectionSpecs = DEFAULT_CONNECTION_SPECS;// 传输层版本和连接协议
      eventListenerFactory = EventListener.factory(EventListener.NONE);// 事件监听工厂
      proxySelector = ProxySelector.getDefault();// 代理选择器
      cookieJar = CookieJar.NO_COOKIES;// cookie
      socketFactory = SocketFactory.getDefault();// socket 工厂
      hostnameVerifier = OkHostnameVerifier.INSTANCE;// 主机名字确认
      certificatePinner = CertificatePinner.DEFAULT;// 证书链
      proxyAuthenticator = Authenticator.NONE;// 代理服务器身份验证
      authenticator = Authenticator.NONE;// 源服务器身份验证
      connectionPool = new ConnectionPool();// 连接池
      dns = Dns.SYSTEM;// 域名
      followSslRedirects = true;// 是否遵循 ssl 重定向
      followRedirects = true;// 是否遵循重定向
      retryOnConnectionFailure = true;// 连接失败的时候是否重试
      connectTimeout = 10_000;// 连接超时时间
      readTimeout = 10_000;// 读超时时间
      writeTimeout = 10_000;// 写超时时间
      pingInterval = 0;// HTTP / 2 和 Web 套接字 ping 之间的时间间隔
    }

这里只简单介绍每个参数的含义,这里先没有必要细述每一个参数的用途。

2.创建请求Request
//第二步、创建请求Request
Request request = new Request.Builder()
    .url("http://github.com")
    .build();

OkHttp网络请求中请求本身就是Request,其封装了请求所需的信息,比如url、header、requestBody等等,它和OkHttpClient一样都是使用建造者模式来配置自己的参数,如下:

public static class Builder {
   
    HttpUrl url; //请求地址
    String method;//请求方法
    Headers.Builder headers;//请求头
    RequestBody body;//请求体

    //这里配置默认的参数
    public Builder() {
   
      this.method 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值