小编Jam*_*ose的帖子

不能对 java.net.http.HttpClient 发出多个请求,否则会收到:javax.net.ssl.SSLHandshakeException

我正在测试HttpClientJava 11的新功能并遇到以下行为:

我正在向公共 REST API 发出两个异步请求以进行测试,并使用一个客户端和两个单独的请求进行了尝试。这个过程没有抛出任何异常。

String singleCommentUrl = "https://jsonplaceholder.typicode.com/comments/1";
String commentsUrl = "https://jsonplaceholder.typicode.com/comments";

Consumer<String> handleOneComment = s -> {
    Gson gson = new Gson();
    Comment comment = gson.fromJson(s, Comment.class);
    System.out.println(comment);
};
Consumer<String> handleListOfComments = s -> {
    Gson gson = new Gson();
    Comment[] comments = gson.fromJson(s, Comment[].class);
    List<Comment> commentList = Arrays.asList(comments);
    commentList.forEach(System.out::println);
};

HttpClient client = HttpClient.newBuilder().build();

client.sendAsync(HttpRequest.newBuilder(URI.create(singleCommentUrl)).build(), HttpResponse.BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(handleOneComment)
        .join();

client.sendAsync(HttpRequest.newBuilder(URI.create(commentsUrl)).build(), HttpResponse.BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(handleListOfComments)
        .join();
Run Code Online (Sandbox Code Playgroud)

然后我尝试将其重构HttpClient为一个方法,当它尝试发出第二个请求时出现以下异常:

public void run() {
    String singleCommentUrl = …
Run Code Online (Sandbox Code Playgroud)

java exception httprequest sslhandshakeexception java-http-client

6
推荐指数
1
解决办法
1332
查看次数