一、OkHttp3简介
OkHttp3是一个开源的Java/Android网络框架,由Square公司开发维护。它支持同步、异步请求和文件上传下载,简单易用,具有高效的速度和强大的扩展性。OkHttp3是网络请求的首选框架之一,也是Retrofit2的底层网络请求库。
二、OkHttp3 Maven配置
在pom.xml文件中添加以下依赖项:
“`xml
com.squareup.okhttp3
okhttp
4.9.1
“`
OkHttp3是Square公司开发的,使用Maven管理依赖需要添加Square仓库。如果没有添加Square仓库,则需要在pom.xml中添加以下内容:
“`xml
square
https://repo1.maven.org/maven2/com/squareup/
“`
三、OkHttp3发送HTTP请求
发送HTTP请求需要先创建OkHttpClient对象,然后创建请求对象Request和响应对象Response。发送请求可以使用同步或异步方式。
1、创建OkHttpClient对象:
“`java
OkHttpClient client = new OkHttpClient();
“`
2、创建请求对象Request:
“`java
Request request = new Request.Builder()
.url(“http://www.example.com”)
.build();
“`
3、同步发送请求并获取响应对象Response:
“`java
Response response = client.newCall(request).execute();
“`
4、异步发送请求并获取响应对象Response:
“`java
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//处理响应
}
});
“`
使用异步方式发送请求可以避免阻塞主线程,提高应用的响应速度。
四、OkHttp3配置请求参数
OkHttpClient.Builder可以设置连接超时时间、读取超时时间、写入超时时间、重试次数、缓存等参数。Request.Builder可以设置请求头、请求参数、请求方式等参数。
1、设置超时时间:
“`java
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
“`
2、设置请求头:
“`java
Request request = new Request.Builder()
.url(“http://www.example.com”)
.addHeader(“User-Agent”, “Mozilla/5.0”)
.build();
“`
3、设置请求参数:
“`java
FormBody formBody = new FormBody.Builder()
.add(“username”, “admin”)
.add(“password”, “123456”)
.build();
Request request = new Request.Builder()
.url(“http://www.example.com”)
.post(formBody)
.build();
“`
4、设置请求方式:
“`java
Request request = new Request.Builder()
.url(“http://www.example.com”)
.get()
.build();
“`
五、OkHttp3处理响应
OkHttp3的响应对象Response包含响应头、响应体和响应码等信息。响应体是服务器返回的数据,可以是文本、图片、音频或视频等。根据不同的数据类型可以使用不同的方式来处理响应。
1、获取响应头:
“`java
Response response = client.newCall(request).execute();
System.out.println(response.headers());
“`
2、获取文本响应体:
“`java
Response response = client.newCall(request).execute();
String body = response.body().string();
System.out.println(body);
“`
3、获取字节流响应体:
“`java
Response response = client.newCall(request).execute();
byte[] data = response.body().bytes();
“`
4、下载文件响应体:
“`java
Response response = client.newCall(request).execute();
ResponseBody body = response.body();
InputStream in = body.byteStream();
Files.copy(in, new File(“example.jpg”).toPath());
in.close();
“`
六、OkHttp3连接池管理
OkHttp3连接池管理可以提高应用的性能和稳定性,减少网络请求的延迟和连接失败率。默认情况下,OkHttp3会为每个主机创建一个连接池,最大连接数为5,每个连接的空闲时间为5分钟。连接池管理可以根据实际情况进行调整。
1、设置连接池和连接数:
“`java
ConnectionPool pool = new ConnectionPool(5, 5, TimeUnit.MINUTES);
OkHttpClient client = new OkHttpClient.Builder()
.connectionPool(pool)
.build();
“`
2、关闭连接池:
“`java
client.connectionPool().evictAll();
“`
七、OkHttp3缓存管理
OkHttp3缓存管理可以减少网络请求的次数和流量,在没有网络的情况下使用缓存可以提高应用的响应速度。默认情况下,OkHttp3不使用缓存。缓存管理需要两个步骤:首先设置缓存目录和缓存大小,然后将cache对象传递给Okhttpclient中。
1、设置缓存目录和缓存大小:
“`java
Cache cache = new Cache(new File(“cache”), 10 * 1024 * 1024);
OkHttpClient client = new OkHttpClient.Builder()
.cache(cache)
.build();
“`
2、清空缓存:
“`java
client.cache().evictAll();
“`
八、OkHttp3日志管理
OkHttp3提供了一个Interceptor用于捕获请求和响应的日志。开启日志需要添加以下依赖项:
“`xml
com.squareup.okhttp3
logging-interceptor
4.9.1
“`
在OkHttpClient.Builder中添加拦截器即可开启日志:
“`java
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
“`
九、OkHttp3异常处理
网络请求过程中可能会出现各种异常,需要使用try-catch语句进行捕获并处理。常见的异常有IOException、SocketTimeoutException、SSLHandshakeException等。
1、IOException异常:
“`java
try {
Response response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
“`
2、SocketTimeoutException异常:
“`java
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
try {
Response response = client.newCall(request).execute();
} catch (SocketTimeoutException e) {
e.printStackTrace();
}
“`
3、SSLHandshakeException异常:
“`java
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), trustManager)
.hostnameVerifier((hostname, session) -> true)
.build();
try {
Response response = client.newCall(request).execute();
} catch (SSLHandshakeException e) {
e.printStackTrace();
}
“`
十、完整例子
下面是一个完整的例子,用于发送POST请求,并处理响应的文本数据。
“`java
public static void main(String[] args) throws IOException {
System.out.println(doPost(“http://www.example.com/login”, “username=admin&password=123456”));
}
public static String doPost(String url, String requestBody) throws IOException {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
RequestBody body = RequestBody.create(requestBody, MediaType.parse(“application/x-www-form-urlencoded”));
Request request = new Request.Builder()
.url(url)
.addHeader(“User-Agent”, “Mozilla/5.0”)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException(“Unexpected code ” + response);
return response.body().string();
}
}
“`
十一、总结
本文从OkHttp3的简介、Maven配置、HTTP请求、请求参数配置、处理响应、连接池管理、缓存管理、日志管理、异常处理等多个方面对OkHttp3进行了详细的介绍和演示。OkHttp3是一个高效、易用、可扩展的网络框架,可以满足大部分的HTTP请求和响应处理需求。在具体使用时,需要根据实际情况进行调整和优化,以满足应用的性能和稳定性要求。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/302906.html