java程序发送异步http请求

方法一:使用 Java 11+ 内置的 HttpClient(推荐)

Java 11 引入了新的 HttpClient 支持异步请求,无需第三方依赖。

import java.net.URI;
import java.net.http.*;
import java.util.concurrent.CompletableFuture;

public class AsyncHttpExample {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/data"))
                .build();

        CompletableFuture<HttpResponse<String>> future = 
            client.sendAsync(request, HttpResponse.BodyHandlers.ofString());

        future.thenApply(HttpResponse::body)
              .thenAccept(body -> System.out.println("响应内容: " + body))
              .exceptionally(ex -> {
                  System.err.println("请求失败: " + ex.getMessage());
                  return null;
              });

        // 防止主线程提前退出(仅示例,实际应用中不需要)
        future.join();
    }
}

方法二:使用 OkHttp 异步请求

OkHttp 是一个流行的第三方HTTP客户端库,支持异步回调。

  1. 添加依赖(Maven):

    <dependency>
        <groupId>com.squareup.okhttp3groupId>
        <artifactId>okhttpartifactId>
        <version>4.12.0version>
    dependency>
    
  2. 代码示例

import okhttp3.*;
import java.io.IOException;

public class OkHttpAsyncExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("https://api.example.com/data")
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String body = response.body().string();
                    System.out.println("响应内容: " + body);
                } else {
                    System.err.println("请求失败: " + response.code());
                }
            }

            @Override
            public void onFailure(Call call, IOException e) {
                System.err.println("请求失败: " + e.getMessage());
            }
        });
    }
}

方法三:使用 Apache HttpClient 异步模块

Apache HttpClient 提供了异步支持,但配置稍复杂。

  1. 添加依赖(Maven):

    <dependency>
        <groupId>org.apache.httpcomponentsgroupId>
        <artifactId>httpasyncclientartifactId>
        <version>4.1.5version>
    dependency>
    
  2. 代码示例

import org.apache.http.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.nio.client.*;
import java.util.concurrent.Future;

public class ApacheAsyncExample {
    public static void main(String[] args) throws Exception {
        CloseableHttpAsyncClient client = HttpAsyncClients.createDefault();
        client.start();

        HttpGet request = new HttpGet("https://api.example.com/data");
        Future<HttpResponse> future = client.execute(request, new FutureCallback<HttpResponse>() {
            @Override
            public void completed(HttpResponse response) {
                System.out.println("响应状态: " + response.getStatusLine());
                // 处理响应内容
            }

            @Override
            public void failed(Exception ex) {
                System.err.println("请求失败: " + ex.getMessage());
            }

            @Override
            public void cancelled() {
                System.err.println("请求取消");
            }
        });

        // 如果需要等待结果
        future.get();
        client.close();
    }
}

关键点总结

  1. Java 11+ HttpClient:官方推荐,无需额外依赖,语法简洁。
  2. OkHttp:第三方库中性能优秀,API 设计友好。
  3. Apache HttpClient:适合需要更底层控制的老项目。

你可能感兴趣的:(java,java,http,开发语言)