前端视角 Java Web 入门手册 3.3:常用工具—— okHttp

okHttp 是一个高效的网络请求框架,默认支持

  • HTTP/2 支持允许对同一主机的所有请求共享一个套接字
  • 连接池减少了请求延迟(如果 HTTP/2 不可用)
  • 透明 GZIP 缩小了下载大小
  • 响应缓存完全避免了网络重复请求

Get a URL

java 复制代码
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;

public class OkHttpGetExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
               .url("https://www.example.com")
               .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                String responseData = response.body().string();
                System.out.println(responseData);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Post to a Server

java 复制代码
import okhttp3.*;

import java.io.IOException;

public class OkHttpPostExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        MediaType mediaType = MediaType.get("application/json; charset=utf-8");
        String json = "{"key":"value"}";
        RequestBody body = RequestBody.create(mediaType, json);

        Request request = new Request.Builder()
               .url("https://www.example.com")
               .post(body)
               .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                String responseData = response.body().string();
                System.out.println(responseData);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

和原生方案对比

Java 1.1 引入HttpURLConnection 用于处理 HTTP 请求的类,它提供了基本的 HTTP 请求功能,适用于简单的 HTTP 请求场景。但其使用过程相对繁琐、不支持链式调用、缺乏异步处理能力、对 HTTP/2 协议的支持有限,使用不是非常广泛

Java 11 引入了新的 HttpClient API,简化了 API,并且提供了原生 HTTP/2 支持,同时支持异步请求。

java 复制代码
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Java11HttpClientGetExample {
    public static void main(String[] args) throws IOException, InterruptedException {
        // 创建 HttpClient 实例
        HttpClient client = HttpClient.newHttpClient();
        // 创建 HttpRequest 对象
        HttpRequest request = HttpRequest.newBuilder()
               .uri(URI.create("https://www.example.com"))
               .build();
        // 发送请求并获取响应
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        // 输出响应码和响应内容
        System.out.println("响应码: " + response.statusCode());
        System.out.println("响应内容: " + response.body());
    }
}

虽然 HttpClient 为 Java 开发者提供了一个强大且内置的 HTTP 客户端工具,但 OkHttp 依然凭借其丰富的功能特性、灵活的配置选项、强大的社区支持以及在特定环境下(如 Android 开发)的卓越表现,保持了其在许多项目中的不可替代性

  1. 拦截器机制: OkHttp 提供了灵活的拦截器机制,允许开发者在请求发送前和响应接收后插入自定义逻辑。这对于日志记录、请求修改、身份验证、重试策略等操作尤为方便。
  2. 高效的缓存机制:OkHttp 内置了强大的缓存功能,能够自动缓存服务器响应,减少重复的网络请求,从而提高应用性能。
  3. 灵活的连接池配置:OkHttp 提供了高度可定制的连接池选项,可以根据项目需求调整最大连接数、连接空闲时间等参数。通过有效管理连接池,OkHttp 能够重用现有连接,降低新建连接的开销,减少网络延迟,提升整体性能。
  4. 更好的 Android 兼容性
    • 官方推荐的 HTTP 客户端库:在 Android 开发中,OkHttp 被官方推荐为首选的 HTTP 客户端库,具有广泛的使用基础和良好的社区支持。
    • 优化移动网络性能:专为移动环境设计,OkHttp 在处理不稳定网络连接、数据压缩和延迟优化方面表现出色,确保应用在各种网络条件下的稳定性和高效性。
    • 易于集成:与 Android Studio 和常用框架(如 Retrofit)无缝集成,简化了网络请求的实现过程。

maven 依赖

xml 复制代码
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>4.12.0</version>
</dependency>
相关推荐
llwszx7 分钟前
Spring中DelayQueue深度解析:从原理到实战(附结构图解析)
java·后端·spring·delayqueue·延迟任务
YongGit21 分钟前
探索 AI + MCP 渲染前端 UI
前端·后端·node.js
述雾学java22 分钟前
Spring Cloud Feign 整合 Sentinel 实现服务降级与熔断保护
java·spring cloud·sentinel
保持学习ing22 分钟前
苍穹外卖day3--公共字段填充+新增菜品
java·阿里云·实战·springboot·前后端·外卖项目·阿里云文件存储
77qqqiqi41 分钟前
正则表达式
java·后端·正则表达式
厦门德仔1 小时前
【WPF】WPF(样式)
android·java·wpf
大春儿的试验田1 小时前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
Gappsong8741 小时前
【Linux学习】Linux安装并配置Redis
java·linux·运维·网络安全
hqxstudying1 小时前
Redis为什么是单线程
java·redis
@大迁世界1 小时前
AR 如何改变我们构建网站的方式
后端·ar·restful