android okhttp网络请求的封装_Android端王者 OKHttp

在Android端,比较有名的是OkHttp和Retrofit,后者在网络请求又是依赖OkHttp的。所以说OkHttp是Android世界里最出名的框架也不为过,今天,我们就来认真分析一下这个框架,依照我务实的风格,这篇文章绝对不会是为了读源码而读源码。

bd9ce8ddb77a97d2bf3333a2d78e5b64.png

HTTP简介

分析这个Http框架,我们就先从Http谈起,Http是互联网上应用最普遍的通讯协议。而所谓通讯协议,就是指通讯双方约定好传输数据的格式。所以要理解Http,只需要理解Http传输数据的格式,下面是Http数据传输双方的大致的数据格式。

421f5f5c4fdef0806acea0cbd6eed980.png

上图列出的并不够详细,因为我们并不是想研究Http本身。

从上图可以看到,一个Http请求本身其实很简单。

从客户端的角度来看

  • 装配Request(涉及到请求方法,url,cookie等等)
  • Client端发送request请求
  • 接收服务端返回的Response数据

是不是简单到令人发指?说起来这和大象装冰箱其实还蛮像的。


一个简单的OkHttp请求

结合上面的步骤,我们来看看在OkHttp框架是怎么完成简单一个网络请求的呢?

//构造RequestRequest req=new Request.Builder()                        .url(url)                        .build();//构造一个HttpClientOkHttpClient client=new OkHttpClient();//发送请求client.newCall(req)        .enqueue(new Callback() {            //获得服务器返回的Response数据            @Override            public void onResponse(Call arg0, Response arg1) throws IOException {                            }                        @Override            public void onFailure(Call arg0, IOException arg1) {                // TODO Auto-generated method stub                            }        });

你瞧,这些步骤和我们预想的都是一样的,OKHttp为你封装了那些复杂,繁琐的东西,只给你你想要的和你需要的。

既然它把Http请求封装得如此简单,它的内部的设计是否也非常的严谨呢?

首先给出OkHttp框架的整个处理流程:

3a39603d91d014566ff2e72721cbf5d3.png

可以看到,OKHttp的框架中,构造Request和HttpClient两个过程其实还是很简单的,而发送请求的过程则显得十分复杂,当然也是最精彩的部分。

下面我们就按照客户端Http请求的流程来看看OKHttp框架的源码。

构造Request

public final class Request {   .......   .....  public static class Builder {    private HttpUrl url;    private String method;    private Headers.Builder headers;    private RequestBody body;    private Object tag;    }    }

使用builder的方式,来插入请求的数据,构建Request,Builder模式相信大家非常熟悉了,所以这里仅仅给出它可构造的参数。

虽然说是构建Request,其实也言过其实,因为你能看到实际上这些数据是不足以构建一个合法的Request的,其他待补全的信息其实是OkHttp在后面某个环节帮你加上去,但至少,在开发者来看,第一步构建Request此时已经完成了。

构造OKHttpClient

public class OkHttpClient implements Cloneable, Call.Factory, WebSocketCall.Factory {  ......  ......  public static final class Builder {    Dispatcher dispatcher;    Proxy proxy;    List protocols;    List connectionSpecs;    final List interceptors = ne
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值