1、前言
之前给大家介绍过HttpClient、Feign,都能帮助我们处理http/https协议,且各有优劣。今天再给大家介绍一款---OKHttp。
2、OKHttp简介
- 允许连接到同一个主机地址的所有请求,提高请求效率
- 共享Socket,减少对服务器的请求次数
- 通过连接池,减少了请求延迟
- 缓存响应数据来减少重复的网络请求
- 减少了对数据流量的消耗
- 自动处理GZip压缩
- 对android更友好
3、代码
坐标
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
OKHttp的代码相对于HttpClient和Feign个人感觉会更加简单一些。
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url + "?" + params)
.get()
.build();
Response response = client.newCall(request).execute();
上述代码中,OkHttpClient
是一个客户端对象主要用来发送http请求的。Request
是一个请求对象,但是得到它可不容易,我们慢慢来分析下。首先是new Request.Builder()
创建的是Builder
构建对象,Builder是专门拥有构造request的一个类。接着调用url
方法传入url地址加上参数,接着调用method请求方式get()
,当然也可以是post()
等其他请求方式。那么目前为止已经确定好url和method,如果没有参数或者请求其实就可以结束了调用build()
返回request
对象。最后通过client
客户端的newCall
方法传入request
然后执行。请求发送完毕并且得到response
响应对象。纵观整个代码结构你就会发现,使用链式编程一套下来你接触到的类很少,并且调用的方法都见名知意,这对于广大编写http请求的同学来说是个福音。再也不用记忆哪些该死的类名,剩下的只有那些和http协议相关的方法了。
接下来我们再来看看post请求,这段代码相对于上面的多了请求头、请求体以及响应内容的获取。
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json;charset=utf-8");
RequestBody body = RequestBody.create(mediaType, params);
Request request = new Request.Builder()
.url(url)
.post(body)
.addHeader("X-Type", "lemonban")
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
System.out.println(response.code());
System.out.println(response.headers());
代码中MediaType
是请求参数的格式类型,RequestBody
是请求体对象,当我们使用post请求时想要设置参数就可以使用RequestBody
设置mediaType
和参数。response
对象中通过body()获取请求体所有的内容,code()
获取状态码,headers()
获取所有响应头对象。
OK,通过上面两段代码可以看出OKHttp代码还是非常简洁的,同学们可以动起手来试试哦~
欢迎来到testingpai.com!
注册 关于