它终究还是来了 ~OKHttp

本贴最后更新于 1564 天前,其中的信息可能已经时过境迁

1、前言

之前给大家介绍过HttpClient、Feign,都能帮助我们处理http/https协议,且各有优劣。今天再给大家介绍一款---OKHttp。

2、OKHttp简介

  1. 允许连接到同一个主机地址的所有请求,提高请求效率
  2. 共享Socket,减少对服务器的请求次数
  3. 通过连接池,减少了请求延迟
  4. 缓存响应数据来减少重复的网络请求
  5. 减少了对数据流量的消耗
  6. 自动处理GZip压缩
  7. 对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代码还是非常简洁的,同学们可以动起手来试试哦~

1 操作
luojie 在 2020-08-06 17:22:26 更新了该帖
回帖
请输入回帖内容 ...