package com.slprojects.slcraftplugin.utils.web; import com.slprojects.slcraftplugin.Main; import com.slprojects.slcraftplugin.utils.ConsoleLog; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; /** * Client HTTP asynchrone */ public class AsyncHttpClient { private final HttpClient httpClient; public AsyncHttpClient() { this.httpClient = HttpClient.newBuilder().build(); } /** * Effectue une requête GET * * @param urlString URL * @return Réponse */ public CompletableFuture<String> get(String urlString) { HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(urlString)) .header("User-Agent", Main.config.getString("name") + " " + Main.config.getString("version")) .header("Server-Type", Main.config.getString("server-type")) .GET() .build(); return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .exceptionally(ex -> { ConsoleLog.danger("Erreur lors de la requête GET vers " + urlString); ConsoleLog.danger(ex.getMessage()); return null; }); } /** * Effectue une requête GET avec des headers * * @param urlString URL * @param postDataBuilder Données POST * @param headers Headers * @return Réponse */ public CompletableFuture<String> post(String urlString, PostDataBuilder postDataBuilder, Map<String, String> headers) { HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(urlString)) .header("User-Agent", Main.config.getString("name") + " " + Main.config.getString("version")) .header("Server-Type", Main.config.getString("server-type")) .headers(headers.entrySet().stream() .flatMap(entry -> Stream.of(entry.getKey(), entry.getValue())) .toArray(String[]::new)) .POST(HttpRequest.BodyPublishers.ofString(postDataBuilder.build())) .build(); return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .exceptionally(ex -> { ConsoleLog.danger("Erreur lors de la requête POST vers " + urlString); ConsoleLog.danger(ex.getMessage()); return null; }); } }