تبدیل دستورات 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 چندین BodyHandler برای پردازش پاسخها ارائه میدهد. از HttpResponse.BodyHandlers.ofString() برای پاسخهای متنی، ofInputStream() برای دادههای باینری، یا ofByteArray() برای بایتهای خام استفاده کنید.
ج: هیچ کتابخانه خارجی مورد نیاز نیست. HttpClient از Java 11 بخشی از کتابخانه استاندارد Java است. برای پردازش JSON، ممکن است بخواهید کتابخانهای مانند Jackson یا Gson اضافه کنید.
ج: برای آپلود فایل در Java، باید از دادههای فرم چندبخشی با HttpClient استفاده کنید. مبدل ما دستورات curl با گزینههای -F
یا --form
را پشتیبانی میکند و کد Java مناسب تولید میکند.
ج: HttpClient در Java مدیریت کوکی را از طریق متد HttpClient.Builder.cookieHandler() ارائه میدهد. هنگامی که دستورات curl شامل مدیریت کوکی (با استفاده از -b
یا --cookie
) را تبدیل میکنید، ابزار ما کد Java تولید میکند که به درستی کوکیها را مدیریت میکند.
ج: در حالی که 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(); } }