日常小结-关于模拟登陆的小结-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
- 日常小结-关于模拟登陆的小结-okhttp库的使用小结
- 日常小结-关于模拟登陆的小结-fastjson库的使用小结
- 日常小结-关于模拟登陆的小结-抓包、cookie、session和token
- 日常小结-关于swing某死锁问题的小结
- 心情小结 程序员的日常
- 关于Bitmap的使用小结
- 关于使用BitMap的小结
- 关于Nginx的使用小结
- 关于Toolbar的使用小结
- oracle日常使用小结
- baseline日常使用小结
- 关于模拟登陆的小结-抓包、cookie、session和token
- 日常小结-协议小结
- 日常小结
- 日常小结
- NoSQL数据库MongoDB的日常使用小结(一)
- 关于C++的小结
- 关于IsPostBack的小结
- JAVA线程:概念与原理
- 详解JS运算符
- wamp开启memcache扩展
- 《流程的永恒之道:工作流及BPM技术的理论、规范、模式及最佳实践》书籍导读
- AWT与Swing
- 日常小结-关于模拟登陆的小结-okhttp库的使用小结
- Java集合小总结(花了一晚上的时间)
- 2016年8月8日,我的博客开通了( ̄▽ ̄)
- 树-堆结构练习——合并果子之哈夫曼树
- 12、阻塞队列
- JAVA中抽象类与接口的区别?
- C++模拟实现堆heap和优先级队列poriorty_queue
- 高德地图java.lang.UnsatisfiedLinkError异常 找不到.so文件
- POJ-3253-Fence Repair