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

来源:互联网 发布:手机计算器软件 编辑:程序博客网 时间:2024/04/30 15:57

本文主要写一下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

1 0