日常小结-关于模拟登陆的小结-okhttp库的使用小结

本文主要写一下okhttp库的使用小结。

OkHttp库是一个支持HTTP协议和HTTP/2协议的java版本客户端程序。是替代httpclient的库,Okhttp目前据说已经时安卓标配。不过我没做过安卓,这里仅仅解释基本的功能。我自己用的时候确实觉得Okhttp用起来很方便,因为第一次用第三方库,感觉比java自带的要好用的多。

Okhttp主要类

Okhttp主要的类并不多打开doc基本上就一列就结束了。常用的也就不多的几个。我只说下我用到的这个几个,没用到的部分就不多说了。

  • OkHttpClient 用来构建Client。
  • Httpurl 用来构建url。
  • Request 用来构建request
  • Response 用来构建response
  • Header 用来构建或者接受request或者response的头信息
  • Body 用来构建或者接受request或者response的体信息
  • Cookie 用于储存Cookie信息。
  • Call 表示以及构建好了的request,可以调用excute执行request

基本使用方法和步骤

用起来其实很简单。除了最后的call以外之前的所有内容都有一个对于的Builder类型。使用方法类似于StringBuilder。基本的格式如:

 HttpUrl url = new HttpUrl.Builder()//创建一个对象的.Builder对象。
     .add*() //对.Builder对象添加相应的字段。
     .add*()

     ...

     .builder();//完成构建后调用builder将.Builder对象转换成构建好了的HttpUrl之类的对象。

//对于已经构建好了对象通常也可以重新构件
 url = url.newBuilder()
     .add*() //对.Builder对象添加相应的字段。
     .add*()

     ...

     .builder();//完成构建后调用builder将.Builder对象转换成构建好了的HttpUrl之类的对象。

对于大多数的请求和应答的获得步骤如下

    OkHttpClient client = new OkHttpClient();

    HttpUrl url = new HttpUrl().Builder()
                        .add*(*)
                        .build();

    Header head = new Header().Builder()
                        .add*(*)
                        .build();
    /*
    RequestBody body = new FormaBody.Builder()//如果是post需要加这部分。
                        .add*(*)
                        .build();
    */

    Request re = new Request().Builder()
                        .url(url)
                        .headers(headers)
                        .post(body)//如果时post的话需要加这样一句
                        .build();

    Call ca = client.newCall(re);

    try (Response res = ca.excute()){
        Header reshead = res.headers();
        ResponseBody resbody = res.body();
    }catch//或者其他

几点需要注意的说明

OkhttpClient:

这个类有自己的连接池和线程池,如果希望得到最佳的性能,最好只创建一个OkhttpClient,然后用它来调用所有的请求和接受响应。当然OkhttpClient也有Builder类,你可以用它定制自己的类。
通常来说OkhttpClient会自动关闭闲置的资源,但是如果你需要尽快关闭也可以调用shutdown。有多种方式具体参见reference和源码。

Responsebody

这个类是需要自己关闭的,主要原因应该是它包含有一个一次性的输入流,需要注意的是这个流是一次性的,一旦你调用了byteStream()、bytes()或者charStream() 、string()之类的方法,那就不可重用了。这一点需要尤其注意。

另外一个需要注意的一点时关于资源的关闭,由于关闭的主要时包含的输入流,如果流关闭了就将资源关闭了。所以以下资源的关闭是等同的,只要执行其中之一就可以了:

  • Response.close()
  • Response.body().close()
  • Response.body().source().close()
  • Response.body().charStream().close()
  • Response.body().byteString().close()
  • Response.body().bytes()
  • Response.body().string()

另外这些都实现了AutoCloseable所以直接用带资源的try就行。

参考资料

okhttp的github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值