عميل HTTP في Java: إجراء الطلبات بشكل صحيح
في تطوير الويب الحديث، لا يكاد أي تطبيق يستغني عن التفاعل مع الخوادم البعيدة. سواء كان التكامل مع REST API، أو تحميل البيانات، أو إرسال النماذج - فإن إتقان العمل مع طلبات HTTP في Java هو مهارة أساسية للمطور. في هذه المقالة، سنشرح كيفية إنشاء عميل HTTP موثوق في Java، وسنستعرض الأساليب الحديثة وأفضل الممارسات.
لماذا من المهم استخدام عميل HTTP الصحيح؟
يستخدم العديد من المطورين المبتدئين الفئة القديمة HttpURLConnection التي ظهرت في Java 1.1. على الرغم من أنها تعمل، إلا أن واجهتها ضخمة وغير مريحة وتتطلب الكثير من الكود النمطي. بدءًا من Java 11، ظهر في المكتبة القياسية java.net.http.HttpClient الحديث الذي يقدم:
- دعم HTTP/2 و WebSocket
- طلبات غير متزامنة عبر CompletableFuture
- نمط Builder بسيط وواضح
- معالجة تلقائية للكوكيز وإعادة التوجيه
أساسيات العمل مع HttpClient في Java 11+
لنستعرض مثالًا أساسيًا لإرسال طلب GET. أولاً، سننشئ نسخة من العميل، ثم نشكل الطلب ونرسله.
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 SimpleHttpClient { public static void main(String[] args) throws Exception { // إنشاء عميل مع مهلة اتصال HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();
// تشكيل طلب GET HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .timeout(Duration.ofSeconds(30)) .header("Accept", "application/json") .GET() .build();
// إرسال الطلب والحصول على الرد HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("الحالة: " + response.statusCode()); System.out.println("محتوى الرد: " + response.body()); }}لاحظ استخدام BodyHandlers.ofString() - هذه طريقة مريحة للحصول على محتوى الرد كسلسلة نصية. إذا كنت بحاجة إلى معالجة JSON، فمن الأفضل استخدام BodyHandlers.ofInputStream() وتمريره إلى المحلل.
إرسال طلب POST مع محتوى
لإرسال البيانات إلى الخادم (على سبيل المثال، عند تسجيل مستخدم)، يتم استخدام طلب POST. لنستعرض مثالًا مع إرسال JSON:
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 PostRequestExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient();
String json = """ { "name": "إيفان إيفانوف", "email": "ivan@example.com", "age": 30 } """;
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/users")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .timeout(Duration.ofSeconds(15)) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 201) { System.out.println("تم إنشاء المستخدم بنجاح!"); System.out.println("المعرف: " + response.body()); } else { System.out