تخطَّ إلى المحتوى

HttpClient

واجهة HttpClient الحديثة HttpClient

واجهة java.net.http.HttpClient (منذ Java 11) لإرسال طلبات HTTP بسيطة ومتزامنة أو غير متزامنة، بديلة عن HttpURLConnection القديمة.

قبل Java 11، الطريقة الوحيدة المدمجة لإرسال طلب HTTP كانت HttpURLConnection — واجهة قديمة تحتاج كودًا مطوّلًا لأشياء بسيطة، ولا تدعم HTTP/2. حزمة java.net.http توفّر HttpClient كبديل حديث: عميل واحد قابل لإعادة الاستخدام وآمن عبر الخيوط (thread-safe)، يبني الطلب عبر HttpRequest.newBuilder()، ويرسل عبر send() (متزامن، يحجب الخيط حتى يصل الرد) أو sendAsync() (يعيد CompletableFuture فورًا بدون حجب).

جسم الرد يُحوَّل عبر BodyHandlers المناسب: ofString() لنص، ofByteArray() لبايتات خام، ofFile(path) لحفظه مباشرة كملف. HttpClient يدعم HTTP/2 افتراضيًا، وHTTP/1.1 كرجوع تلقائي إذا لم يدعمه الخادم.

الصياغة

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create(الرابط)).build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());

📄 مثال

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.example.com/data"))
        .GET()
        .build();

HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());

أهم النقاط

العنصرالوظيفة
HttpClient.newHttpClient()ينشئ عميلًا بإعدادات افتراضية، قابل لإعادة الاستخدام لعدة طلبات
HttpRequest.newBuilder()يبني الطلب: الرابط، الترويسات، الطريقة (GET/POST/...)
client.send(request, handler)إرسال متزامن — يحجب الخيط الحالي حتى يصل الرد
client.sendAsync(request, handler)إرسال غير متزامن — يعيد CompletableFuture فورًا
BodyHandlers.ofString() / ofFile()طريقة تحويل جسم الرد إلى نص أو ملف

💡 نصائح عملية

  • أنشئ HttpClient واحدًا وأعد استخدامه لعدة طلبات بدل إنشاء عميل جديد لكل طلب — هو thread-safe ومصمم لإعادة الاستخدام
  • استخدم sendAsync() عند إرسال عدة طلبات بالتوازي دون حجب الخيط الرئيسي

⚠️ أخطاء شائعة

  • استخدام HttpURLConnection في كود جديد بدل HttpClient دون سبب — HttpClient أبسط ويدعم HTTP/2
  • نسيان معالجة استثناء IOException أو InterruptedException حول send() — العملية قد تفشل بسبب الشبكة

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار JAVA الكامل بالعربي.