Skip to content
Snippets Groups Projects
Commit f0207a49 authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

Création d'une classe utilitaire pour la création de requêtes HTTP et...

Création d'une classe utilitaire pour la création de requêtes HTTP et suppression de l'ancienne méthode getHttp
parent f29ffb86
Branches
No related tags found
No related merge requests found
Pipeline #185 passed
......@@ -8,6 +8,7 @@ import com.slprojects.slcraftplugin.parallelTasks.dataHandlers.PlayerDataHandler
import com.slprojects.slcraftplugin.parallelTasks.events.PeriodicEvent;
import com.slprojects.slcraftplugin.utils.ConsoleLog;
import com.slprojects.slcraftplugin.utils.Database;
import com.slprojects.slcraftplugin.utils.web.AsyncHttpClient;
import io.papermc.paper.event.player.AsyncChatEvent;
import me.clip.placeholderapi.PlaceholderAPI;
import net.kyori.adventure.text.Component;
......@@ -42,6 +43,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
......@@ -268,45 +270,6 @@ public final class Main extends JavaPlugin implements Listener {
getLinkCode.setExecutor(linkCodeCommand);
}
// Permet de faire des appels vers l'api discord
public String getHttp(String urlString) {
String returnData = "";
// Processus long et chiant
try {
URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
con.setRequestProperty("Accept-Language", "fr-FR,fr;q=0.5");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Server-Type", config.getString("server-type"));
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setAllowUserInteraction(false);
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
con.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
con.disconnect();
returnData = response.toString();
} catch (Exception ex) {
ConsoleLog.danger("Impossible de se connecter à l'url " + urlString + ". Func getHttp(String urlString)");
ex.printStackTrace();
}
return returnData;
}
// Envoyer un message sur le discord
@SuppressWarnings({"unchecked"})
public void sendMessageToDiscord(String message, String username) {
......@@ -325,10 +288,13 @@ public final class Main extends JavaPlugin implements Listener {
try {
String urlString = config.getString("discordBot-api-url") + "mc/chat/" + URLEncoder.encode(json.toJSONString(), "UTF-8").replace("+", "%20");
String response = getHttp(urlString);
AsyncHttpClient httpClient = new AsyncHttpClient();
CompletableFuture<String> response = httpClient.get(urlString);
response.thenAccept(res -> {
if (getConfig().getBoolean("msg-verbose")) {
ConsoleLog.info("Func AsyncChatEvent(PlayerChatEvent e), HTTP response:" + response);
ConsoleLog.info("Func sendMessageToDiscord(String message, String username), HTTP response:" + res);
}
});
} catch (UnsupportedEncodingException ex) {
ConsoleLog.danger("Impossible de d'encoder les données. Func AsyncChatEvent(PlayerChatEvent e)");
ex.printStackTrace();
......
......@@ -2,6 +2,7 @@ package com.slprojects.slcraftplugin.parallelTasks;
import com.slprojects.slcraftplugin.Main;
import com.slprojects.slcraftplugin.utils.ConsoleLog;
import com.slprojects.slcraftplugin.utils.web.AsyncHttpClient;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.json.simple.JSONObject;
......@@ -13,6 +14,7 @@ import java.net.ServerSocket;
import java.net.Socket;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.concurrent.CompletableFuture;
public class InternalWebServer {
/**
......@@ -134,7 +136,9 @@ public class InternalWebServer {
ConsoleLog.danger("Erreur lors de l'encodage du message. Func waitForDiscordMsg::startServer(Main plugin)");
ex.printStackTrace();
}
plugin.getHttp(urlString);
AsyncHttpClient httpClient = new AsyncHttpClient();
httpClient.get(urlString);
} catch (ParseException e) {
e.printStackTrace();
}
......
package com.slprojects.slcraftplugin.utils.web;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/**
* Client HTTP asynchrone
*/
public class AsyncHttpClient {
/**
* Effectue une requête GET
* @param urlString URL
* @return Réponse
*/
public CompletableFuture<String> get(String urlString) {
return CompletableFuture.supplyAsync(() -> {
try {
URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
con.disconnect();
return response.toString();
} catch (Exception ex) {
ex.printStackTrace();
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) {
return CompletableFuture.supplyAsync(() -> {
try {
URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
// Set request headers
headers.forEach(con::setRequestProperty);
con.setDoOutput(true);
// Write the request body
try (OutputStream os = con.getOutputStream()) {
byte[] input = postDataBuilder.build().getBytes("utf-8");
os.write(input, 0, input.length);
}
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
con.disconnect();
return response.toString();
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
});
}
}
package com.slprojects.slcraftplugin.utils.web;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Constructeur de données POST
*/
public class PostDataBuilder {
private Map<String, String> data;
public PostDataBuilder() {
data = new LinkedHashMap<>();
}
/**
* Ajoute une donnée POST
* @param name Nom
* @param value Valeur
*/
public PostDataBuilder addData(String name, String value) {
data.put(name, value);
return this;
}
/**
* Construit les données POST
* @return Données POST
*/
public String build() {
String postData = data.entrySet().stream()
.map(entry -> {
try {
return entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.toString());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Error encoding POST data.", e);
}
})
.collect(Collectors.joining("&"));
return postData;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment