马士兵java架构师

您现在的位置是:架构师问答 >

架构师问答

Java 的4种 Http 调用

2023-11-27 21:03:20架构师问答 本文浏览次数:1 百度已收录

本 文 目 录

Java 的4种 Http 调用

HTTP 调用是日常开发中经常遇到的问题,本文将介绍四种常见的 Java HTTP 调用方法。

一、HttpURLConnection

HttpURLConnection 是 Java 自带的 API,可以用来发送 HTTP 请求和接收 HTTP 响应。它是一个抽象类,常用的子类有 HttpURLConnetionHttpsURLConnectionHttpURLConnection 使用起来相对简单,适合简单的 GET 和 POST 请求。

实现步骤:

  1. 创建 URL 对象
  2. 打开连接
  3. 设置请求参数
  4. 发送请求
  5. 接收响应
  6. 关闭连接

具体实现:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLConnectionDemo {
    public static void main(String[] args) throws Exception {
        // 1. 创建 URL 对象
        URL url = new URL("http://example.com");

        // 2. 打开连接
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        // 3. 设置请求参数(例如:设置请求方法为 POST)
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);

        // 4. 发送请求(例如:发送一个 JSON 字符串)
        String json = "{\"key\":\"value\"}";
        byte[] bytes = json.getBytes("UTF-8");
        conn.getOutputStream().write(bytes);

        // 5. 接收响应(例如:读取响应内容)
        int responseCode = conn.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        // 输出结果
        System.out.println(response.toString());

        // 6. 关闭连接
        conn.disconnect();
    }
}

二、Apache HttpClient

Apache HttpClient 是 Apache 组织提供的一个强大的 HTTP 客户端库,支持多种协议和认证方式。它的功能比 HttpURLConnection 更加强大,但使用起来也稍微复杂一些。

实现步骤:

  1. 创建 HttpClient 对象
  2. 创建 HttpMethod 或 HttpRequestBase 对象
  3. 设置请求参数
  4. 发送请求并接收响应
  5. 处理响应结果
  6. 关闭连接

具体实现:

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientDemo {
    public static void main(String[] args) throws Exception {
        // 1. 创建 HttpClient 对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        try {
            // 2. 创建 HttpMethod 或 HttpRequestBase 对象
            HttpGet httpGet = new HttpGet("http://example.com");

            // 3. 设置请求参数
            // ...

            // 4. 发送请求并接收响应
            CloseableHttpResponse response = httpClient.execute(httpGet);

            try {
                // 5. 处理响应结果(例如:读取响应内容)
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String result = EntityUtils.toString(entity);
                    System.out.println(result);
                }
            } finally {
                response.close();
            }
        } finally {
            // 6. 关闭连接
            httpClient.close();
        }
    }
}

三、OkHttp

OkHttp 是一款现代且高效的 HTTP 客户端库,由 Square 公司开发。它具有良好的性能、易于使用的 API 和灵活的网络调优策略。

实现步骤:

  1. 创建 OkHttpClient 对象
  2. 创建 Request 对象
  3. 设置请求参数
  4. 发送请求并接收响应
  5. 处理响应结果

具体实现:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpDemo {
    public static void main(String[] args) throws Exception {
        // 1. 创建 OkHttpClient 对象
        OkHttpClient client = new OkHttpClient();

        // 2. 创建 Request 对象
        Request request = new Request.Builder()
                .url("http://example.com")
                .build();

        // 3. 设置请求参数
        // ...

        // 4. 发送请求并接收响应
        Response response = client.newCall(request).execute();

        // 5. 处理响应结果(例如:读取响应内容)
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

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

四、Spring WebClient

Spring WebClient 是 Spring Framework 5.0 引入的新特性,提供了一种现代化的方式来执行 HTTP 请求。它基于反应式编程模型,支持异步处理和流式数据。

实现步骤:

  1. 创建 WebClient 对象
  2. 创建 Flux 或 Mono 对象
  3. 发送请求并接收响应
  4. 处理响应结果

具体实现:

import reactor.core.publisher.Mono;
import org.springframework.web.reactive.function.client.WebClient;

public class SpringWebClientDemo {
    public static void main(String[] args) throws Exception {
        // 1. 创建 WebClient 对象
        WebClient webClient = WebClient.create();

        // 2. 创建 Mono 对象
        Mono<String> mono = webClient.get()
                .uri("http://example.com")
                .retrieve()
                .bodyToMono(String.class);

        // 3. 发送请求并接收响应
        mono.subscribe(result -> {
            // 4. 处理响应结果(例如:打印响应内容)
            System.out.println(result);
        });
    }
}

总结

以上介绍了 Java 中的四种 HTTP 调用方式,包括 HttpURLConnection、Apache HttpClient、OkHttp 和 Spring WebClient。这些库各有优缺点,开发者可以根据实际需求选择合适的库进行使用。同时,在实际应用中,我们还需要考虑异常处理、线程安全等问题。