Μετατρέψτε εντολές curl σε κώδικα Java - Δημιουργήστε έτοιμο προς χρήση κώδικα Java HttpClient για αιτήματα API
// Java HttpClient code will appear here // Example: import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; public class HttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .connectTimeout(Duration.ofSeconds(10)) .build(); String jsonBody = "{\"name\": \"test\"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(jsonBody)) .build(); HttpResponseresponse = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); } }
Εδώ είναι μερικές κοινές εντολές curl που μπορείτε να μετατρέψετε σε κώδικα Java:
curl https://api.example.com/users
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","email":"[email protected]"}' https://api.example.com/users
curl -X PUT -H "Authorization: Bearer token123" -d '{"status":"active"}' https://api.example.com/users/1
curl -X DELETE https://api.example.com/users/1
curl -H "X-API-Key: abc123" -H "Accept: application/json" https://api.example.com/data
Η βιβλιοθήκη HttpClient της Java (που εισήχθη στην Java 11) είναι ένας ισχυρός και σύγχρονος τρόπος για την πραγματοποίηση αιτημάτων HTTP. Εδώ είναι μερικά κοινά μοτίβα Java HttpClient:
import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class FileUploadExample { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .build(); Path path = Paths.get("document.pdf"); String boundary = "----WebKitFormBoundary" + System.currentTimeMillis(); String contentType = "multipart/form-data; boundary=" + boundary; // Create multipart form data String data = "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"file\"; filename=\"" + path.getFileName() + "\"\r\n" + "Content-Type: application/pdf\r\n\r\n"; byte[] fileData = Files.readAllBytes(path); byte[] requestBody = new byte[data.getBytes().length + fileData.length + ("\r\n--" + boundary + "--\r\n").getBytes().length]; System.arraycopy(data.getBytes(), 0, requestBody, 0, data.getBytes().length); System.arraycopy(fileData, 0, requestBody, data.getBytes().length, fileData.length); System.arraycopy(("\r\n--" + boundary + "--\r\n").getBytes(), 0, requestBody, data.getBytes().length + fileData.length, ("\r\n--" + boundary + "--\r\n").getBytes().length); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/upload")) .header("Content-Type", contentType) .header("Authorization", "Bearer YOUR_TOKEN_HERE") .POST(HttpRequest.BodyPublishers.ofByteArray(requestBody)) .build(); HttpResponseresponse = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } }
import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; public class ErrorHandlingExample { public static void main(String[] args) { HttpClient client = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .connectTimeout(Duration.ofSeconds(5)) .build(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .timeout(Duration.ofSeconds(5)) .GET() .build(); try { HttpResponseresponse = client.send(request, HttpResponse.BodyHandlers.ofString()); int statusCode = response.statusCode(); if (statusCode >= 200 && statusCode < 300) { System.out.println("Success: " + response.body()); } else { System.out.println("Error: " + statusCode + " - " + response.body()); } } catch (IOException e) { System.out.println("Connection error: " + e.getMessage()); } catch (InterruptedException e) { System.out.println("Request interrupted: " + e.getMessage()); Thread.currentThread().interrupt(); } catch (Exception e) { System.out.println("Error making request: " + e.getMessage()); } } }
Αντιγράψτε την εντολή curl σας → Επικολλήστε στο πλαίσιο εισαγωγής → Λάβετε μετατρεπόμενο κώδικα Java HttpClient
Ο μετατροπέας μας υποστηρίζει σύνθετες εντολές curl και τις μεταφράζει σε καθαρό, αποδοτικό κώδικα Java χρησιμοποιώντας τη βιβλιοθήκη HttpClient
Το εργαλείο μας χειρίζεται αυτές τις κοινές επιλογές curl και τις μετατρέπει σε κατάλληλο κώδικα Java HttpClient:
Α: Ο παραγόμενος κώδικας Java HttpClient απαιτεί Java 11 ή νεότερη. Για παλαιότερες εκδόσεις Java, εξετάστε τη χρήση εναλλακτικών πελατών HTTP όπως Apache HttpClient ή OkHttp.
Α: Ο βασικός παραγόμενος κώδικας περιλαμβάνει μπλοκ try/catch για IOException και InterruptedException. Για κώδικα παραγωγής, ίσως θέλετε να προσθέσετε πιο συγκεκριμένο χειρισμό σφαλμάτων για διαφορετικούς κωδικούς κατάστασης HTTP.
Α: Η βιβλιοθήκη HttpClient παρέχει διάφορους BodyHandlers για την επεξεργασία αποκρίσεων. Χρησιμοποιήστε HttpResponse.BodyHandlers.ofString() για αποκρίσεις κειμένου, ofInputStream() για δυαδικά δεδομένα, ή ofByteArray() για ακατέργαστα bytes.
Α: Δεν απαιτούνται εξωτερικές βιβλιοθήκες. Το HttpClient είναι μέρος της τυπικής βιβλιοθήκης Java από την Java 11. Για επεξεργασία JSON, ίσως θέλετε να προσθέσετε μια βιβλιοθήκη όπως Jackson ή Gson.
Α: Για μεταφορτώσεις αρχείων σε Java, θα χρειαστεί να χρησιμοποιήσετε δεδομένα φόρμας πολλαπλών μερών με HttpClient. Ο μετατροπέας μας χειρίζεται εντολές curl με -F
ή --form
επιλογές και παράγει τον κατάλληλο κώδικα Java.
Α: Το Java HttpClient παρέχει χειρισμό cookies μέσω της μεθόδου HttpClient.Builder.cookieHandler(). Όταν μετατρέπετε εντολές curl που περιλαμβάνουν χειρισμό cookies (χρησιμοποιώντας -b
ή --cookie
), το εργαλείο μας παράγει κώδικα Java που διαχειρίζεται σωστά τα cookies.
Α: Ενώ το curl είναι εξαιρετικό για γρήγορες δοκιμές API γραμμής εντολών, το Java HttpClient παρέχει μια προγραμματιστική προσέγγιση που ενσωματώνεται με τις εφαρμογές Java σας. Η μετατροπή του curl σε Java βοηθά στη γεφύρωση του χάσματος μεταξύ δοκιμών και υλοποίησης στην ανάπτυξη Java.
Η κατανόηση των εντολών curl είναι απαραίτητη για αποτελεσματικές δοκιμές API με Java. Εδώ είναι μια γρήγορη αναφορά κοινών επιλογών curl που υποστηρίζει ο μετατροπέας μας:
curl [options] [URL]
-X, --request METHOD
: Specify request method (GET, POST, PUT, DELETE, etc.)-H, --header LINE
: Add header to the request-d, --data DATA
: Send data in POST request-F, --form CONTENT
: Submit form data-u, --user USER:PASSWORD
: Server user and password-k, --insecure
: Allow insecure server connections-I, --head
: Show document info only-v, --verbose
: Make the operation more verbose-s, --silent
: Silent mode--connect-timeout SECONDS
: Maximum time for connectionΟ μετατροπέας Java μας χειρίζεται σύνθετες εντολές curl συμπεριλαμβανομένων πολλαπλών κεφαλίδων, πιστοποίησης, ωφέλιμων φορτίων δεδομένων και διαφόρων επιλογών. Απλά επικολλήστε την εντολή curl σας και λάβετε καθαρό, σύγχρονο κώδικα Java χρησιμοποιώντας τη βιβλιοθήκη HttpClient.
Όταν εργάζεστε με τη βιβλιοθήκη Java HttpClient, ακολουθήστε αυτές τις βέλτιστες πρακτικές για αποδοτικές και ασφαλείς αλληλεπιδράσεις API:
import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.URI; public class HttpClientReuseExample { // Create a single HttpClient instance for the application private static final HttpClient httpClient = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .build(); public static void main(String[] args) throws Exception { // First request HttpRequest request1 = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/users")) .GET() .build(); HttpResponseresponse1 = httpClient.send(request1, HttpResponse.BodyHandlers.ofString()); // Second request (uses same client) HttpRequest request2 = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/products")) .GET() .build(); HttpResponse response2 = httpClient.send(request2, HttpResponse.BodyHandlers.ofString()); } }
import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpTimeoutException; public class ErrorHandlingBestPractice { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .GET() .build(); try { HttpResponseresponse = client.send(request, HttpResponse.BodyHandlers.ofString()); switch (response.statusCode()) { case 200: case 201: System.out.println("Success: " + response.body()); break; case 400: System.out.println("Bad request: " + response.body()); break; case 401: case 403: System.out.println("Authentication error: " + response.statusCode()); break; case 404: System.out.println("Resource not found"); break; case 500: case 503: System.out.println("Server error: " + response.statusCode()); break; default: System.out.println("Unexpected status: " + response.statusCode()); } } catch (HttpTimeoutException e) { System.out.println("Request timed out: " + e.getMessage()); } catch (IOException e) { System.out.println("Network error: " + e.getMessage()); } catch (InterruptedException e) { System.out.println("Request interrupted"); Thread.currentThread().interrupt(); } } }
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.concurrent.CompletableFuture; public class AsyncRequestExample { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .GET() .build(); CompletableFuture> futureResponse = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); futureResponse .thenApply(HttpResponse::body) .thenAccept(System.out::println) .exceptionally(e -> { System.err.println("Error: " + e.getMessage()); return null; }); // Do other work while the request is processing System.out.println("Request sent asynchronously..."); // Wait for the request to complete if needed futureResponse.join(); } }