محول Curl إلى Java

تحويل أوامر curl إلى كود Java - توليد كود Java HttpClient جاهز للاستخدام لطلبات API

إشعار الخصوصية: توفر هذه الأداة الاحترافية تحويلاً آمناً إلى كود Java مع حماية خصوصية على مستوى المؤسسات. نحن لا نخزن أي بيانات تقدمها، مما يضمن سرية كاملة لعمل تطوير API الخاص بك.

مولد كود Java HttpClient

// 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();
                
        HttpResponse response = client.send(request, 
                HttpResponse.BodyHandlers.ofString());
                
        System.out.println(response.statusCode());
        System.out.println(response.body());
    }
}

أوامر curl الشائعة لاختبار API في Java

فيما يلي بعض أوامر curl الشائعة التي يمكنك تحويلها إلى كود Java:

أمثلة Java HttpClient

مكتبة Java HttpClient (المقدمة في Java 11) هي طريقة قوية وحديثة لإجراء طلبات HTTP. فيما يلي بعض أنماط Java HttpClient الشائعة:

تحميل الملفات باستخدام 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();
                
        HttpResponse response = client.send(request, 
                HttpResponse.BodyHandlers.ofString());
                
        System.out.println(response.body());
    }
}

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.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 {
            HttpResponse response = 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());
        }
    }
}

كيفية استخدام محول Java HttpClientr

1. الاستخدام الأساسي

انسخ أمر curl الخاص بك → الصقه في مربع الإدخال → احصل على كود Java HttpClient المحول

2. ميزات Java HttpClient

  • HTTP methods (GET, POST, PUT, DELETE, etc.)
  • Request headers in Java format
  • JSON and form data handling
  • Basic and token authentication
  • SSL verification options
  • Session handling with Java HttpClient

3. استخدام Java HttpClient المتقدم

يدعم محولنا أوامر curl المعقدة ويترجمها إلى كود Java نظيف وفعال باستخدام مكتبة HttpClient

4. تحويل خيارات curl إلى Java

تتعامل أداتنا مع خيارات curl الشائعة هذه وتحولها إلى كود Java HttpClient مناسب:

  • -X, --request: Sets the HTTP method (GET, POST, PUT, etc.)
  • -H, --header: Adds HTTP headers to the request
  • -d, --data: Sends data in the request body
  • --data-binary: Sends binary data in the request body
  • -u, --user: Adds basic authentication
  • -k, --insecure: Disables SSL certificate verification
  • --connect-timeout: Sets connection timeout

الأسئلة الشائعة حول Java HttpClient

س: ما هو إصدار Java المطلوب للكود المولد؟

ج: يتطلب كود Java HttpClient المولد Java 11 أو أعلى. بالنسبة لإصدارات Java الأقدم، فكر في استخدام عملاء HTTP بديلة مثل Apache HttpClient أو OkHttp.

س: هل يتعامل كود Java مع فحص الأخطاء؟

ج: يتضمن الكود الأساسي المولد كتل try/catch لـ IOException و InterruptedException. بالنسبة لكود الإنتاج، قد ترغب في إضافة معالجة أخطاء أكثر تحديداً لرموز حالة HTTP المختلفة.

س: كيف يمكنني معالجة الاستجابة في Java؟

ج: توفر مكتبة HttpClient عدة BodyHandlers لمعالجة الاستجابات. استخدم HttpResponse.BodyHandlers.ofString() للاستجابات النصية، أو ofInputStream() للبيانات الثنائية، أو ofByteArray() للبايتات الخام.

س: هل أحتاج إلى تثبيت أي مكتبات لاستخدام الكود المولد؟

ج: لا يلزم وجود مكتبات خارجية. HttpClient هو جزء من مكتبة Java القياسية منذ Java 11. لمعالجة JSON، قد ترغب في إضافة مكتبة مثل Jackson أو Gson.

س: كيف أحول أمر curl مع تحميل ملف إلى Java؟

ج: لتحميلات الملفات في Java، ستحتاج إلى استخدام بيانات نموذج متعددة الأجزاء مع HttpClient. يتعامل محولنا مع أوامر curl التي تحتوي على خيارات -F أو --form ويولد كود Java المناسب.

س: كيف أتعامل مع ملفات تعريف الارتباط في Java HttpClient؟

ج: توفر مكتبة Java HttpClient التعامل مع ملفات تعريف الارتباط من خلال طريقة HttpClient.Builder.cookieHandler(). عندما تقوم بتحويل أوامر curl التي تتضمن التعامل مع ملفات تعريف الارتباط (باستخدام -b أو --cookie)، تقوم أداتنا بتوليد كود Java يدير ملفات تعريف الارتباط بشكل صحيح.

س: ما هو الفرق بين استخدام curl و Java HttpClient لاختبار API؟

ج: بينما يعتبر curl ممتازاً لاختبار API السريع في سطر الأوامر، يوفر Java HttpClient نهجاً برمجياً يتكامل مع تطبيقات Java الخاصة بك. يساعد تحويل curl إلى Java في سد الفجوة بين الاختبار والتنفيذ في تطوير Java.

مرجع أوامر Curl لاختبار API في Java

فهم أوامر curl ضروري لاختبار API الفعال مع Java. إليك مرجعاً سريعاً لخيارات curl الشائعة التي يدعمها محولنا:

بناء جملة curl الأساسي

curl [options] [URL]

خيارات curl الشائعة

تحويل أوامر curl المعقدة

يتعامل محول Java لدينا مع أوامر curl المعقدة بما في ذلك الرؤوس المتعددة والمصادقة وحمولات البيانات والخيارات المختلفة. ما عليك سوى لصق أمر curl الخاص بك والحصول على كود Java نظيف وحديث باستخدام مكتبة HttpClient.

أفضل ممارسات Java HttpClient

عند العمل مع مكتبة Java HttpClient، اتبع أفضل الممارسات التالية للتفاعلات الفعالة والآمنة مع API:

1. إعادة استخدام نسخ HttpClient

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();
        HttpResponse response1 = 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());
    }
}

2. تنفيذ معالجة الأخطاء بشكل صحيح

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 {
            HttpResponse response = 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();
        }
    }
}

3. استخدام الطلبات غير المتزامنة لأداء أفضل

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();
    }
}