عميل HTTP في جافا: إجراء الطلبات بشكل صحيح من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا نحتاج عميل HTTP في جافا؟

\n\n

التطوير الحديث في جافا نادراً ما يخلو من التفاعل مع الخدمات الخارجية. سواء كان إرسال بيانات إلى خادم، أو الحصول على معلومات من REST API، أو التكامل مع المنصات السحابية — في كل مكان نحتاج إلى عميل HTTP. في جافا، توجد عدة طرق لتنفيذ طلب HTTP، ومن المهم اختيار النهج الصحيح.

\n\n

لفترة طويلة، كانت الأداة القياسية هي مكتبة java.net.HttpURLConnection، ولكن مع إصدار Java 11 ظهرت وحدة جديدة وأكثر ملاءمة وهي java.net.http. في هذه المقالة، سنستعرض جميع مراحل العمل مع عميل HTTP في جافا: من طلبات GET البسيطة إلى إرسال JSON ومعالجة الأخطاء.

\n\n

المقالة موجهة للمطورين الذين هم بالفعل على دراية بأساسيات جافا، ولكنهم يرغبون في تنظيم معرفتهم حول طلبات الشبكة. سنستخدم HttpClient المدمج من Java 11+، لأنه نهج حديث وموصى به.

\n\n

1. أساسيات عميل HTTP: الإنشاء والتكوين

\n\n

قبل إرسال الطلبات، نحتاج إلى إنشاء نسخة من HttpClient. هذا هو الكائن المركزي الذي يتم من خلاله تنفيذ جميع عمليات HTTP. دعنا نلقي نظرة على التكوين الأساسي.

\n\n

إنشاء العميل

\n\n

أبسط طريقة هي استخدام الطريقة الثابتة newHttpClient():

\n\n
import java.net.http.HttpClient;\n\nHttpClient client = HttpClient.newHttpClient();
\n\n

ومع ذلك، في المشاريع الحقيقية، غالباً ما يكون من الضروري ضبط المهلات الزمنية، أو إصدار البروتوكول، أو الوكيل. إليك مثال على تكوين متقدم:

\n\n
import java.net.http.HttpClient;\nimport java.time.Duration;\n\nHttpClient client = HttpClient.newBuilder()\n    .version(HttpClient.Version.HTTP_2) // استخدام HTTP/2\n    .connectTimeout(Duration.ofSeconds(10)) // مهلة الاتصال\n    .followRedirects(HttpClient.Redirect.NORMAL) // متابعة إعادة التوجيه تلقائياً\n    .build();
\n\n

معلمات التكوين الهامة

\n\n
    \n
  • version — الاختيار بين HTTP/1.1 و HTTP/2 (افتراضياً HTTP/2 إذا كان الخادم يدعمه)
  • \n
  • connectTimeout — أقصى وقت انتظار للاتصال
  • \n
  • followRedirects — سياسة معالجة إعادة التوجيه (NEVER, ALWAYS, NORMAL)
  • \n
  • proxy — إعداد خادم الوكيل (إذا لزم الأمر)
  • \n
\n\n

لاحظ: يمكن استخدام نسخة واحدة من HttpClient لطلبات متعددة. إنه آمن للاستخدام مع الخيوط، لذا يمكن إنشاؤه مرة واحدة وإعادة استخدامه في جميع أنحاء التطبيق.

\n\n

2. إنشاء وإرسال طلبات HTTP

\n\n

الآن ننتقل إلى الجزء الرئيسي — تشكيل الطلبات. في Java 11+، يتم استخدام الفئة HttpRequest لهذا الغرض. دعنا نستعرض الأنواع الرئيسية للطلبات.

\n\n

طلب GET: الحصول على البيانات

\n\n

GET هو أبسط نوع من الطلبات. يُستخدم للحصول على البيانات من الخادم. مثال:

\n\n
import java.net.URI;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\nHttpRequest request = HttpRequest.newBuilder()\n    .uri(URI.create("https://api.example.com/users"))\n    .GET() // تحديد الطريقة بشكل صريح (يمكن حذفها، GET افتراضياً)\n    .build();\n\nHttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());\n\nSystem.out.println("الحالة: " + response.statusCode());\nSystem.out.println("محتوى الاستجابة: " + response.body());
\n\n

الطريقة send() تنفذ طلباً متزامناً. إذا كنت بحاجة إلى تنفيذ غير متزامن، استخدم sendAsync() الذي يُرجع CompletableFuture.

\n\n

طلب POST: إرسال البيانات

\n\n

يُستخدم POST لإرسال البيانات إلى الخادم. غالباً ما يكون JSON أو نموذج. دعنا نلقي نظرة على كلا الخيارين.

\n\n

POST مع JSON:

\n\n
import java.net.http.HttpRequest.BodyPublishers;\n\nString json = "{\\"name\\":\\"إيفان\\",\\"email\\":\\"iva                

المدونات

توصيات الكتب