Chuyển đổi lệnh curl thành mã Java - Tạo mã Java HttpClient sẵn sàng sử dụng cho các yêu cầu 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()); } }
Dưới đây là một số lệnh curl phổ biến mà bạn có thể chuyển đổi thành mã 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
Thư viện HttpClient của Java (giới thiệu trong Java 11) là một cách mạnh mẽ và hiện đại để thực hiện các yêu cầu HTTP. Dưới đây là một số mẫu Java HttpClient phổ biến:
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()); } } }
Sao chép lệnh curl của bạn → Dán vào hộp nhập liệu → Nhận mã Java HttpClient đã chuyển đổi
Bộ chuyển đổi của chúng tôi hỗ trợ các lệnh curl phức tạp và chuyển đổi chúng thành mã Java sạch, hiệu quả sử dụng thư viện HttpClient
Công cụ của chúng tôi xử lý các tùy chọn curl phổ biến này và chuyển đổi chúng thành mã Java HttpClient thích hợp:
Đ: Mã Java HttpClient được tạo yêu cầu Java 11 trở lên. Đối với các phiên bản Java cũ hơn, hãy xem xét sử dụng các HTTP client thay thế như Apache HttpClient hoặc OkHttp.
Đ: Mã cơ bản được tạo bao gồm các khối try/catch cho IOException và InterruptedException. Đối với mã sản xuất, bạn có thể muốn thêm xử lý lỗi cụ thể hơn cho các mã trạng thái HTTP khác nhau.
Đ: Thư viện HttpClient cung cấp một số BodyHandlers để xử lý phản hồi. Sử dụng HttpResponse.BodyHandlers.ofString() cho phản hồi văn bản, ofInputStream() cho dữ liệu nhị phân, hoặc ofByteArray() cho byte thô.
Đ: Không cần thư viện bên ngoài. HttpClient là một phần của thư viện chuẩn Java kể từ Java 11. Đối với xử lý JSON, bạn có thể muốn thêm một thư viện như Jackson hoặc Gson.
Đ: Đối với tải lên tệp trong Java, bạn cần sử dụng dữ liệu biểu mẫu đa phần với HttpClient. Bộ chuyển đổi của chúng tôi xử lý các lệnh curl với tùy chọn -F
hoặc --form
và tạo mã Java thích hợp.
Đ: HttpClient của Java cung cấp xử lý cookie thông qua phương thức HttpClient.Builder.cookieHandler(). Khi bạn chuyển đổi các lệnh curl bao gồm xử lý cookie (sử dụng -b
hoặc --cookie
), công cụ của chúng tôi tạo mã Java quản lý cookie đúng cách.
Đ: Trong khi curl rất tốt cho kiểm thử API dòng lệnh nhanh, Java HttpClient cung cấp một cách tiếp cận lập trình tích hợp với ứng dụng Java của bạn. Chuyển đổi curl sang Java giúp bắc cầu khoảng cách giữa kiểm thử và triển khai trong phát triển Java.
Hiểu các lệnh curl là điều cần thiết cho kiểm thử API hiệu quả với Java. Dưới đây là tham khảo nhanh về các tùy chọn curl phổ biến mà bộ chuyển đổi của chúng tôi hỗ trợ:
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 connectionBộ chuyển đổi Java của chúng tôi xử lý các lệnh curl phức tạp bao gồm nhiều header, xác thực, tải trọng dữ liệu và các tùy chọn khác nhau. Chỉ cần dán lệnh curl của bạn và nhận mã Java sạch, hiện đại sử dụng thư viện HttpClient.
Khi làm việc với thư viện Java HttpClient, hãy tuân theo các thực hành tốt nhất sau đây để tương tác API hiệu quả và an toàn:
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(); } }