首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基本使用——OkHttp3详细使用教程

基本使用——OkHttp3详细使用教程

原创
作者头像
用户3672714
发布2025-09-06 14:53:10
发布2025-09-06 14:53:10
9040
举报

OkHttp3 基本使用教程

OkHttp 是一个强大、高效、支持 HTTP 和 HTTPS 请求的客户端库,广泛用于 Android 和 Java 项目中。它可以轻松地处理网络请求,支持同步/异步请求、连接池、缓存、重定向、拦截器等高级功能。

本文将通过一个 OkHttp3 的详细使用教程,介绍其基本功能,包括如何发起请求、处理响应、处理异常、使用拦截器等。


1. 引入 OkHttp3 依赖

首先,你需要在项目中引入 OkHttp3 的依赖。如果你在 Android 项目 中使用 OkHttp,请在 build.gradle 文件中添加:

dependencies {

implementation 'com.squareup.okhttp3:okhttp:4.9.0'

}

对于 Java 项目,你可以使用 Maven 或 Gradle 来添加依赖:

Maven(pom.xml):

<dependency>

<groupId>com.squareup.okhttp3</groupId>

<artifactId>okhttp</artifactId>

<version>4.9.0</version>

</dependency>

Gradle:

implementation 'com.squareup.okhttp3:okhttp:4.9.0'


2. 发起基本请求

2.1 创建 OkHttpClient 实例

首先,我们需要创建一个 OkHttpClient 实例,所有的请求都通过该实例来执行。

import okhttp3.OkHttpClient;

OkHttpClient client = new OkHttpClient();

2.2 发送 GET 请求

下面是一个发送 GET 请求 的基本例子:

import okhttp3.Request;

import okhttp3.Response;

public class Main {

public static void main(String[] args) throws Exception {

OkHttpClient client = new OkHttpClient();

// 创建请求对象

Request request = new Request.Builder()

.url("https://api.github.com/users/octocat")

.build();

// 执行请求并获取响应

try (Response response = client.newCall(request).execute()) {

if (response.isSuccessful()) {

// 打印响应体

System.out.println(response.body().string());

} else {

System.out.println("请求失败: " + response.message());

}

}

}

}

解释

  • Request.Builder().url() 用来构建请求。
  • client.newCall(request).execute() 发送请求并获取响应。
  • response.body().string() 获取响应体内容(通常是 JSON 数据)。

2.3 发送 POST 请求

发送 POST 请求 时,需要在请求体中发送数据。可以使用 RequestBody 来封装数据。

import okhttp3.Request;

import okhttp3.RequestBody;

import okhttp3.Response;

import okhttp3.MediaType;

public class Main {

public static void main(String[] args) throws Exception {

OkHttpClient client = new OkHttpClient();

// 请求体

MediaType JSON = MediaType.parse("application/json; charset=utf-8");

String json = "{\"name\":\"John\", \"age\":30}";

RequestBody body = RequestBody.create(json, JSON);

// 创建 POST 请求

Request request = new Request.Builder()

.url("https://httpbin.org/post")

.post(body)

.build();

// 执行请求并获取响应

try (Response response = client.newCall(request).execute()) {

System.out.println(response.body().string());

}

}

}

解释

  • RequestBody.create() 用来创建请求体,指定数据类型和内容。
  • .post(body) 用来设置 POST 请求的请求体。

2.4 发送异步请求

OkHttp 也支持 异步请求,可以在后台线程中执行请求,而不会阻塞主线程。

import okhttp3.Callback;

import okhttp3.Request;

import okhttp3.Response;

import java.io.IOException;

public class Main {

public static void main(String[] args) {

OkHttpClient client = new OkHttpClient();

// 创建请求对象

Request request = new Request.Builder()

.url("https://api.github.com/users/octocat")

.build();

// 执行异步请求

client.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Request request, IOException e) {

System.out.println("请求失败: " + e.getMessage());

}

@Override

public void onResponse(Response response) throws IOException {

if (response.isSuccessful()) {

System.out.println(response.body().string());

} else {

System.out.println("请求失败: " + response.message());

}

}

});

}

}

解释

  • enqueue() 方法使请求异步执行。
  • onResponse() 和 onFailure() 分别用于处理响应和异常。

3. 使用请求拦截器

OkHttp 允许你通过拦截器来操作请求和响应。拦截器可以用于添加通用的请求头、日志记录、修改响应数据等。

3.1 添加拦截器

import okhttp3.Interceptor;

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.Response;

import java.io.IOException;

public class Main {

public static void main(String[] args) throws Exception {

// 创建拦截器

Interceptor loggingInterceptor = new Interceptor() {

@Override

public Response intercept(Chain chain) throws IOException {

Request request = chain.request();

System.out.println("请求头: " + request.headers());

// 在请求头中添加自定义信息

Request newRequest = request.newBuilder()

.addHeader("Authorization", "Bearer token")

.build();

return chain.proceed(newRequest);

}

};

// 创建 OkHttpClient,添加拦截器

OkHttpClient client = new OkHttpClient.Builder()

.addInterceptor(loggingInterceptor)

.build();

// 创建请求对象

Request request = new Request.Builder()

.url("https://api.github.com/users/octocat")

.build();

// 执行请求

try (Response response = client.newCall(request).execute()) {

System.out.println("响应内容: " + response.body().string());

}

}

}

解释

  • 创建了一个日志拦截器,将请求头中的 Authorization 添加到请求中。
  • 拦截器可以修改请求和响应内容。

3.2 日志拦截器(Logging Interceptor)

你可以使用 OkHttp 的 Logging Interceptor 来打印 HTTP 请求和响应的详细日志信息,这对调试非常有用。

首先,添加依赖:

implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'

使用日志拦截器:

import okhttp3.OkHttpClient;

import okhttp3.logging.HttpLoggingInterceptor;

public class Main {

public static void main(String[] args) {

// 创建日志拦截器

HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();

loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // 日志级别

// 创建 OkHttpClient,添加日志拦截器

OkHttpClient client = new OkHttpClient.Builder()

.addInterceptor(loggingInterceptor)

.build();

// 创建请求对象

Request request = new Request.Builder()

.url("https://api.github.com/users/octocat")

.build();

// 执行请求

client.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Request request, IOException e) {

System.out.println("请求失败: " + e.getMessage());

}

@Override

public void onResponse(Response response) throws IOException {

System.out.println(response.body().string());

}

});

}

}

解释

  • HttpLoggingInterceptor 记录请求和响应的详细信息。
  • 可以设置不同的日志级别,如 BODYHEADERSBASIC 等。

4. 配置缓存

OkHttp 还支持 缓存机制,可以使用缓存来减少请求次数,提高性能。

4.1 创建缓存对象

import okhttp3.Cache;

import okhttp3.OkHttpClient;

import java.io.File;

public class Main {

public static void main(String[] args) {

// 设置缓存文件夹和大小

File cacheDirectory = new File("cache");

Cache cache = new Cache(cacheDirectory, 10 * 1024 * 1024); // 10MB

// 创建 OkHttpClient,启用缓存

OkHttpClient client = new OkHttpClient.Builder()

.cache(cache)

.build();

// 创建请求对象

Request request = new Request.Builder()

.url("https://api.github.com/users/octocat")

.build();

// 执行请求

try (Response response = client.newCall(request).execute()) {

System.out.println(response.body().string());

}

}

}

解释

  • Cache 对象定义了缓存的存储位置和大小。
  • client.newCall(request).execute() 会自动处理缓存,避免重复请求。

**5. 总结

**

OkHttp3 是一个非常强大且灵活的网络库,能够满足各种类型的网络请求需求。其常用的功能包括:

  • 同步请求 和 异步请求
  • 使用 拦截器 来处理请求、响应和日志。
  • 缓存 的实现,以提高性能。
  • 请求超时 和 重试机制

通过上述功能,你可以轻松地在 Android 或 Java 项目中实现高效、可定制的网络通信。

https://www.52runoob.com/archives/6795

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OkHttp3 基本使用教程
  • 1. 引入 OkHttp3 依赖
  • 2. 发起基本请求
    • 2.1 创建 OkHttpClient 实例
    • 2.2 发送 GET 请求
    • 2.3 发送 POST 请求
    • 2.4 发送异步请求
  • 3. 使用请求拦截器
    • 3.1 添加拦截器
    • 3.2 日志拦截器(Logging Interceptor)
  • 4. 配置缓存
    • 4.1 创建缓存对象
  • **5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档