המר פקודות 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() עבור בייטים גולמיים.
ת: לא נדרשות ספריות חיצוניות. HttpClient הוא חלק מספריית התקן של Java מאז Java 11. לעיבוד 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(); } }